我正在使用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);
答案 0 :(得分:4)
QTreeView没有itemChanged
信号,因此您的QObject::connect
电话会失败。
这是一个很好的例子,说明为什么要始终检查QObject::connect
的返回值。此外,失败的连接将出现在您的调试输出中,您也应该监视它。
可能你正在寻找QTreeWidget,它继承自QTreeView并且确实有一个itemChanged
信号,虽然它有一个QTreeWidgetItem*
作为参数,而不是const QModelIndex&
}。