Ist es möglich, ein signal zu kreieren, wenn ein QTreeWidgetItem checkbox aktiviert ist?
Ich habe eine checkbox, die auch eine QTreeWidgetItem mit dem code unten.
//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;
}
Ich brauche eine Verbindung der signal-und slot für, wenn der Zustand der checkbox geändert wird. Die aktuelle Art und Weise habe ich implementiert, diese ist unten aber leider nicht funktioniert. Kann mir jemand erklären, was ich falsch mache und was ich tun muss, um es zu verbinden?
connect(program, SIGNAL(toggled(bool)), this, SLOT(programChecked(bool)));
InformationsquelleAutor Robert Whitley | 2012-03-13
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
QTreeWidgetItem
ist direkt verbunden mit Ihrer Modell-Daten, so sollten Sie die Verbindung zu Ihrem QTreeWidget Modell istQAbstractItemModel::dataChanged
- signal werden von der änderung benachrichtigt.treeWidget.model().dataChanged.connect(handle_dataChanged)
. Nicht sicher, ob dies besser ist als nur den Anschluss zuitemChanged
aber es scheint ähnlich.Müssen Sie greifen das signal
itemChanged ( QTreeWidgetItem * item, int column )
aus QTreeWidget.Verbinden, um das signal
itemClicked(QTreeWidgetItem* item, int column)
des Baumes. Beim Umgang mit dem signal, nur überprüfenitem->checkState(column)
.Die beste Lösung, die wir fanden, war zu implementieren setData in einem item-Unterklasse:
Wäre es wirklich praktisch, diese in Qt in der Tat, es macht mich denken über den Beitrag eines itemCheckStateChanged signal direkt dort hin 🙂
PS: Einstellung Qt::ItemIsUserCheckable unnötig ist, dieses flag ist standardmäßig für alle QTreeWidgetItems.