Qt将itemChanged信号附加到QStandardItem不起作用

时间:2011-07-30 12:04:06

标签: c++ qt signals-slots

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

1 个答案:

答案 0 :(得分:4)

QTreeView没有itemChanged信号,因此您的QObject::connect电话会失败。

这是一个很好的例子,说明为什么要始终检查QObject::connect的返回值。此外,失败的连接将出现在您的调试输出中,您也应该监视它。

可能你正在寻找QTreeWidget,它继承自QTreeView并且确实有一个itemChanged信号,虽然它有一个QTreeWidgetItem*作为参数,而不是const QModelIndex& }。