gpt4 book ai didi

c++ - 检查 qtreewidgetitem 复选框是否被选中

转载 作者:太空宇宙 更新时间:2023-11-04 13:51:34 25 4
gpt4 key购买 nike

我有一个带有可检查项目的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();
}
}

最佳答案

i use connect but my slot is not called, i add break point in my slot but i never reach it

在这种情况下,可以做几件事来确定问题:

  • 检查控制台输出以查看是否有任何投诉。

  • 查看connect语句是否被调用。

  • 检查连接语句的返回值是否连接成功。

在这种特殊情况下,问题是匹配参数,因为连接语句有这个:

SLOT(playerChecked(QWidgetItem*,int))

鉴于您有此插槽声明:

playerChecked(QTreeWidgetItem *item, int i)

您可以看到 QWidgetItemQTreeWidgetItem 的混合。这可能也适用于 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。因此你应该得到一个编译错误。

关于c++ - 检查 qtreewidgetitem 复选框是否被选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23179717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com