由于QTableView具有公共函数setRowHidden()和setColumnHidden(),但如果人A执行隐藏操作,B人如何知道更改?如果有可用的信号可以了解QTableView中的几何变化吗?
非常感谢。
答案 0 :(得分:1)
不,信号没有发出,医生也没有说出任何信息,但你可以自己轻松搞定。
只需创建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);
}
现在您可以像原始方法一样调用重载方法。
答案 1 :(得分:0)
心情愉快,我终于找到了解决方案来观察tableView中行/列的隐藏/显示行为。该方法仍然回溯到信号/时隙机制。仅仅因为Qt系统中的术语很奇怪,一些概念实际上并不是非常简单和令人困惑。
QTableView *tableView = new QTableView;
tableView->setRowHidden(0, true);
这将使tableView成为第0行隐藏。这个操作实际上只是使行的部分调整大小。结果是该部分的大小为ZERO,并且发出信号sectionResized()。