Qt присоединение сигнала itemChanged к QStandardItem не работает - PullRequest
2 голосов
/ 30 июля 2011

Я использую 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 Ответ

4 голосов
/ 30 июля 2011

QTreeView не имеет сигнала itemChanged, поэтому ваш QObject::connect вызов не будет выполнен.

Это хороший пример того, почему вы всегда должны проверять возвращаемое значение изQObject::connect.Кроме того, в вашем отладочном выводе появилось бы сбойное соединение, которое вы также должны отслеживать.

Возможно, вы ищете QTreeWidget , который наследуется от QTreeView и имеет itemChanged сигнал, хотя и имеющий QTreeWidgetItem* в качестве параметра, а не const QModelIndex&.

...