هل من الممكن إنشاء إشارة عندما يتم تبديل مربع الاختيار كتريويدجيتيتم?
-
13-12-2019 - |
سؤال
لقد قمت بإنشاء مربع الاختيار الذي هو أيضا كتريويدجيتيتم باستخدام التعليمات البرمجية أدناه.
//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.