Qt 如何将rowCountChanged连接到插槽

Qt 如何将rowCountChanged连接到插槽,qt,qtablewidget,Qt,Qtablewidget,以下是我倾向于设计的: 当tablewidget发生变化时(比如它的行数), 标签将显示行数。但当我尝试时,Qtcreator说: Object::connect:在..\ui\mainwindow.cpp:55中没有这样的信号QTableWidget::rowCountChanged(int,int) 为什么??rowCountChanged(int,int)是从QTableView继承的一个插槽,我认为 感谢您从rowCountChanged的定义中可以看出:- void QTableVie

以下是我倾向于设计的: 当tablewidget发生变化时(比如它的行数), 标签将显示行数。但当我尝试时,Qtcreator说:
Object::connect:在..\ui\mainwindow.cpp:55中没有这样的信号QTableWidget::rowCountChanged(int,int)

为什么??rowCountChanged(int,int)是从QTableView继承的一个插槽,我认为


感谢您从rowCountChanged的定义中可以看出:-

void QTableView::rowCountChanged(int oldCount, int newCount) [protected slot]

这是一个受保护的插槽,因此您看到的错误“无此类信号”是正确的。您可能需要做的是检查附加到QTableView的模型数据中是否有更改。

正如merlin所说,这是一个受保护的插槽

但您可以询问基础模型:

(因为小部件继承自tableView,而tableView继承自AbstractView)

并连接到模型信号:

void QAbstractItemModel::rowsInserted ( const QModelIndex & parent, int start, int end ) [signal]
void QAbstractItemModel::rowsRemoved ( const QModelIndex & parent, int start, int end ) [signal]
你有所有的模型信号

事实上,我还想探索另一种方法:

子类化QTableWidget,(public)您将有权访问该受保护的插槽

因此,创建自己的信号:

void YourTableWidget::rowCountChanged(int,int)
{
QTableWidget::rowCountChanged(int,int);
emit your_signal(...);

}

rowCountChanged-没有这样的信号。你从哪里得到的(链接到文档)?@Trompa+1很好的跟进;O) @Trompa奇妙的方式此外,我找到了另一种方式。只有两种方式可以更改行:删除或添加。因此,在子例程中,只需添加您自己的信号,如
changeRows(rowCount())
。将它连接到想要的插槽,魔法就会发生。
void YourTableWidget::rowCountChanged(int,int)
{
QTableWidget::rowCountChanged(int,int);
emit your_signal(...);

}