我有一个带有可检查项目的qtreewidget
,我可以选中并取消选中该元素,我想检查项目是否已选中,我使用connect
但我的slot
未被调用,我在我的插槽中添加断点,但我从未到达它,
我这样连接:
connect(_events, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(eventChecked(QWidgetItem*,int)));
connect(_player, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(playerChecked(QWidgetItem*,int)));
我同时使用了itemClicked和itemChanged但我的插槽从未调用过,我的插槽是:
playerChecked(QTreeWidgetItem *item, int i)
{
if(item->checkState(i) == Qt::Checked) {
std::cout << "reached here" << std::endl;
} else {
operators->printAllowedPlayers();
}
}
答案 0 :(得分:0)
我犯了错误,因为在连接语句中我使用Qwidgetitem而不是qtreewidgetitem
答案 1 :(得分:0)
我使用连接,但我的插槽没有被调用,我在我的插槽中添加断点,但我从未到达它
在这种情况下,可以采取一些措施来解决问题:
检查控制台输出以查看是否有任何投诉。
查看是否调用了connect语句。
检查connect语句的返回值是否成功建立连接。
在这种特殊情况下,问题是匹配参数,因为你有这个用于连接语句:
SLOT(playerChecked(QWidgetItem*,int))
而你有这个插槽声明:
playerChecked(QTreeWidgetItem *item, int i)
您可以看到QWidgetItem
和QTreeWidgetItem
的混合。这也可能适用于eventChecked
插槽。您需要使它们匹配,可能是通过将QTreeWidgetItem *传递给插槽,特别是因为这也是插槽连接到的信号。这将是解决方案:
connect(_events, SIGNAL(itemClicked(QTreeWidgetItem*,int)), this, SLOT(eventChecked(QTreeWidgetItem*,int)));
connect(_player, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(playerChecked(QTreeWidgetItem*,int)));
就个人而言,我甚至会删除this
参数,因为它是隐含的。这使得线条更短,而不会使其不那么全面。
此外,您的插槽定义似乎不包含返回值。您需要在其中添加void
。你应该得到一个编译错误。