是否可以在切换QTreeWidgetItem复选框时创建信号?

Rob*_*ley 11 c++ checkbox qt signals-slots qtreewidgetitem

我使用下面的代码创建了一个也是QTreeWidgetItem的复选框.

//Populate list
QTreeWidgetItem *program = createCheckedTreeItem(QString::fromStdString(itr->first), true);
treePrograms->addTopLevelItem(program);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)

当复选框的状态发生变化时,我需要一种连接信号和插槽的方法.我实现这一点的当前方式如下,但不幸的是不起作用.有人可以解释我做错了什么以及我需要做什么才能让它连接起来?

connect(program, SIGNAL(toggled(bool)), this, SLOT(programChecked(bool)));
Run Code Online (Sandbox Code Playgroud)

Mas*_*sci 6

你必须抓住itemChanged ( QTreeWidgetItem * item, int column )来自QTreeWidget的信号.


Chr*_*wet 5

QTreeWidgetItem直接链接到您的模型数据,因此您应该连接到 QTreeWidget 的模型QAbstractItemModel::dataChanged信号以收到更改通知。


G H*_*ley 5

连接到itemClicked(QTreeWidgetItem* item, int column)树的信号。处理信号时,只需验证item->checkState(column).