我正在使用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/

10-11 17:06