Frage

Ich habe mit dem folgenden Code ein Kontrollkästchen erstellt, das auch ein QTreeWidgetItem ist.

//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 benötige eine Möglichkeit, ein Signal und einen Steckplatz zu verbinden, wenn der Status dieses Kontrollkästchens geändert wird.Die aktuelle Art und Weise, wie ich dies implementiert habe, ist unten aufgeführt, funktioniert aber leider nicht.Kann mir jemand erklären, was ich falsch mache und was ich tun muss, damit die Verbindung hergestellt wird?

connect(program, SIGNAL(toggled(bool)), this, SLOT(programChecked(bool)));
War es hilfreich?

Lösung

Dein QTreeWidgetItem ist direkt mit Ihren Modelldaten verknüpft, daher sollten Sie eine Verbindung zu den Modellen Ihres QTreeWidget herstellen QAbstractItemModel::dataChanged Signal, um über die Änderung informiert zu werden.

Andere Tipps

Du musst das Signal ergreifen itemChanged ( QTreeWidgetItem * item, int column ) kommen von QTreeWidget.

Verbinden Sie sich mit dem Signal itemClicked(QTreeWidgetItem* item, int column) des Baumes.Wenn Sie mit dem Signal umgehen, überprüfen Sie es einfach item->checkState(column).

Die beste Lösung, die wir gefunden haben, war, SetData in einer Artikel-Subklasse wiederzubauen:

generasacodicetagpre.

Es wäre wirklich bequem, dies in qt in der Tat zu haben, dachte ich, dass ich darüber nachdenken kann, ein tatcheckstatechanged-Signal direkt beizutragen :)

ps: Einstellung qt :: itemususercheckable ist nicht notwendig, dieses Flag ist standardmäßig für alle qtreewidgetitems.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top