2017-09-01 443 views

回答

0

隨着最幸福的心情,我終於找到了解決方案來觀察tableView中行/列的隱藏/顯示行爲。該方法仍然回到信號/插槽機制。僅僅因爲Qt系統中的奇怪術語,一些概念實際上並不是非常直接和令人困惑。

QTableView *tableView = new QTableView; 
tableView->setRowHidden(0, true); 

這將使tableView的第0行隱藏。這個操作實際上只是使行的部分調整大小。其結果是該部分的大小爲零,併發出信號sectionResized()。

+0

你的意思是'QHeaderView'? 'QTableView'沒有'sectionResized'signal。 – Macias

+0

yes,vertical&horizo​​ntal當tableview的視圖改變時,QHeaderView會發出sectionResized信號。實際上,我認爲section是訪問和操作tableView渲染的唯一入口。 –

1

不,信號不發射,但文檔沒有提及任何內容,但您可以自己輕鬆製作。
只需創建QTableView的子類並覆蓋setRowHiddensetColumnHidden方法,請調用原始方法並在其中添加信號發射。類似的東西:

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); 
} 

現在你可以打電話給你的重載方法,就像原有的。

+0

我在QHeaderView中發現了一些信號,希望能夠使用它們。我認爲這些信號可能會幫助我解決問題。謝謝。 –

相關問題