在QTableView中隐藏行或列时发出的信号是什么?

时间:2017-09-01 03:35:59

标签: c++ qt

由于QTableView具有公共函数setRowHidden()和setColumnHidden(),但如果人A执行隐藏操作,B人如何知道更改?如果有可用的信号可以了解QTableView中的几何变化吗?

非常感谢。

2 个答案:

答案 0 :(得分: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);
}

现在您可以像原始方法一样调用重载方法。

答案 1 :(得分:0)

心情愉快,我终于找到了解决方案来观察tableView中行/列的隐藏/显示行为。该方法仍然回溯到信号/时隙机制。仅仅因为Qt系统中的术语很奇怪,一些概念实际上并不是非常简单和令人困惑。

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

这将使tableView成为第0行隐藏。这个操作实际上只是使行的部分调整大小。结果是该部分的大小为ZERO,并且发出信号sectionResized()。