12

以下のコードを使用して、QTreeWidgetItem でもあるチェックボックスを作成しました。

//Populate list
QTreeWidgetItem *program = createCheckedTreeItem(QString::fromStdString(itr->first), true);
treePrograms->addTopLevelItem(program);

QTreeWidgetItem* ConfigDialog::createCheckedTreeItem(QString name,bool checkBoxState)
{
  QTreeWidgetItem *item = new QTreeWidgetItem(QStringList(name));
  item->setFlags(item->flags()|Qt::ItemIsUserCheckable);
  if (checkBoxState)
  {
    item->setCheckState(0,Qt::Unchecked);
  }
  else
  {
    item->setCheckState(0,Qt::Checked);
  }
  return item;
}

このチェックボックスの状態が変更されたときのために、シグナルとスロットを接続する方法が必要です。これを実装した現在の方法は次のとおりですが、残念ながら機能しません。誰かが私が間違っていることと、接続するために何をする必要があるかを説明できますか?

connect(program, SIGNAL(toggled(bool)), this, SLOT(programChecked(bool)));
4

5 に答える 5

8

QTreeWidgetitemChanged ( QTreeWidgetItem * item, int column )からのシグナルを取得する必要があります。

于 2012-03-13T15:34:01.013 に答える
5

itemClicked(QTreeWidgetItem* item, int column)木の信号に接続します。信号を処理するときは、確認するだけitem->checkState(column)です。

于 2014-04-02T05:31:20.870 に答える
5

はモデル データに直接リンクされているため、 QTreeWidgetQTreeWidgetItemのモデルのQAbstractItemModel::dataChangedシグナルに接続して変更を通知する必要があります。

于 2012-03-13T15:13:22.577 に答える