在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);
}
现在你可以打电话给你的重载方法,就像原有的。
+0
我在QHeaderView中发现了一些信号,希望能够使用它们。我认为这些信号可能会帮助我解决问题。谢谢。 –
你的意思是'QHeaderView'? 'QTableView'没有'sectionResized'signal。 – Macias
yes,vertical&horizontal当tableview的视图改变时,QHeaderView会发出sectionResized信号。实际上,我认为section是访问和操作tableView渲染的唯一入口。 –