2017-09-01 47 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中发现了一些信号,希望能够使用它们。我认为这些信号可能会帮助我解决问题。谢谢。 –

相关问题