我正在使用qtreeview尝试找出复选框状态何时更改,
但是SLOT方法永远不会触发。
这是我的代码:
// in the init
connect(ui.treeView_mainwindow, SIGNAL(itemChanged( const QModelIndex &)), this,
SLOT(tree_itemChanged( const QModelIndex &)));
// this method never trigered
void GroupMainWindowContainer::tree_itemChanged(const QModelIndex & index)
{
QStandardItem* standardItem = m_model->itemFromIndex(index);
Qt::CheckState checkState = standardItem->checkState();
if(checkState == Qt::Checked)
{
WRITELOG("Qt::Checked")
}
else if(checkState == Qt::Unchecked)
{
WRITELOG("Qt::Unchecked")
}
}
// this is how i build the items :
QList<QStandardItem *> items;
items.insert(0,new QStandardItem());
items.at(0)->setCheckable(true);
items.at(0)->setCheckState(Qt::Unchecked);
m_model->insertRow(0,items);
最佳答案
QTreeView没有itemChanged
信号,因此您的QObject::connect
调用将失败。
这是一个很好的示例,说明了为什么应始终检查QObject::connect
的返回值。同样,失败的连接将出现在调试输出中,您也应该对其进行监视。
可能您正在寻找QTreeWidget,它继承自QTreeView并确实具有itemChanged
信号,尽管其中一个参数是QTreeWidgetItem*
而不是const QModelIndex&
。
关于c++ - Qt将itemChanged信号附加到QStandardItem不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6882985/