هل من الممكن إنشاء إشارة عندما يتم تبديل مربع الاختيار كتريويدجيتيتم?

StackOverflow https://stackoverflow.com//questions/9686648

سؤال

لقد قمت بإنشاء مربع الاختيار الذي هو أيضا كتريويدجيتيتم باستخدام التعليمات البرمجية أدناه.

//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)));
هل كانت مفيدة؟

المحلول

الخاص بك QTreeWidgetItem يرتبط مباشرة إلى بيانات النموذج الخاص بك ، لذلك يجب عليك الاتصال نموذج كتريويدجيت الخاص بك QAbstractItemModel::dataChanged إشارة ليتم إعلامك من التغيير.

نصائح أخرى

يجب عليك الاستيلاء على Signal itemChanged ( QTreeWidgetItem * item, int column ) القادمة من qtreewidget .

الاتصال إشارة itemClicked(QTreeWidgetItem* item, int column) من الشجرة.عند التعامل مع الإشارة ، تحقق فقط item->checkState(column).

أفضل حل وجدنا هو إعادة تعيين SetData في فئة فرعية عنصر:

giveacodicetagpre.

سيكون من المناسب حقا أن يكون هذا في QT في الواقع، يجعلني أفكر في المساهمة في إشارة عن ItemCheckstatechanged هناك مباشرة :)

PS: إعداد QT :: ItemISSerCeLable غير ضروري، يتم تشغيل هذه العلامة افتراضيا لجميع qtreewidegetems.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top