由於QTableView具有公共函數setRowHidden()和setColumnHidden(),但是如果人員A執行隱藏操作,那麼人員B如何才能知道這些更改?如果有可用的信號可以提供有關QTableView中幾何變化的信息?在QTableView中隱藏行或列時發出的信號是什麼?
提前感謝。
由於QTableView具有公共函數setRowHidden()和setColumnHidden(),但是如果人員A執行隱藏操作,那麼人員B如何才能知道這些更改?如果有可用的信號可以提供有關QTableView中幾何變化的信息?在QTableView中隱藏行或列時發出的信號是什麼?
提前感謝。
隨着最幸福的心情,我終於找到了解決方案來觀察tableView中行/列的隱藏/顯示行爲。該方法仍然回到信號/插槽機制。僅僅因爲Qt系統中的奇怪術語,一些概念實際上並不是非常直接和令人困惑。
QTableView *tableView = new QTableView;
tableView->setRowHidden(0, true);
這將使tableView的第0行隱藏。這個操作實際上只是使行的部分調整大小。其結果是該部分的大小爲零,併發出信號sectionResized()。
不,信號不發射,但文檔沒有提及任何內容,但您可以自己輕鬆製作。
只需創建QTableView
的子類並覆蓋setRowHidden
和setColumnHidden
方法,請調用原始方法並在其中添加信號發射。類似的東西:
MyTableView.h
#include <QTableView>
class MyTableView : public QTableView
{
Q_OBJECT
public:
MyTableView(QWidget *parent = Q_NULLPTR);
~MyTableView();
void setColumnHidden(int column, bool hide);
void setRowHidden(int row, bool hide);
signals:
void columnHidden(int column, bool hide);
void rowHidden(int row, bool hide);
};
MyTableView.cpp
#include "mytableview.h"
MyTableView::MyTableView(QWidget *parent) : QTableView(parent)
{
}
MyTableView::~MyTableView()
{
}
void MyTableView::setRowHidden(int row, bool hide)
{
QTableView::setRowHidden(row, hide);
emit rowHidden(row, hide);
}
void MyTableView::setColumnHidden(int column, bool hide)
{
QTableView::setColumnHidden(column, hide);
emit columnHidden(column, hide);
}
現在你可以打電話給你的重載方法,就像原有的。
我在QHeaderView中發現了一些信號,希望能夠使用它們。我認爲這些信號可能會幫助我解決問題。謝謝。 –
你的意思是'QHeaderView'? 'QTableView'沒有'sectionResized'signal。 – Macias
yes,vertical&horizontal當tableview的視圖改變時,QHeaderView會發出sectionResized信號。實際上,我認爲section是訪問和操作tableView渲染的唯一入口。 –