我在 TaskGenJob.h 中有我的类,其中 TaskGenModel 继承自 QObject:-
TaskGenJob.h
class TaskGenJob : public TaskGenModel
{
Q_OBJECT
public:
TaskGenJob();
~TaskGenJob();
}
TaskGenJob::TaskGenJob()
{
//Connect signal itemExpanded to updateValue so that Display is updated only on tree expansion
connect(TaskGenJobDisplayPtr->getTaskGenJobTreeWdiget(), SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(updateValue()));
}
在我的 TaskGenJob.cpp 文件中,我尝试像上面那样将 QTreeWidgetItem 的信号连接到 updateValue。
但我收到以下错误:-
/opt/qt_4.8.6/include/linux60_64/gcc48/QtCore/qobject.h:204:17: note: no known conversion for argument 1 from 'QTreeWidgetItem*' to 'const QObject*'
/opt/qt_4.8.6/include/linux60_64/gcc48/QtCore/qobject.h:217:17: note: static bool QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType)
static bool connect(const QObject *sender, const QMetaMethod &signal,
^
/opt/qt_4.8.6/include/linux60_64/gcc48/QtCore/qobject.h:217:17: note: no known conversion for argument 1 from 'QTreeWidgetItem*' to 'const QObject*'
/opt/qt_4.8.6/include/linux60_64/gcc48/QtCore/qobject.h:337:13: note: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
inline bool QObject::connect(const QObject *asender, const char *asignal,
错误是因为 QTreeWidgetItem 没有继承自 QObject
并且没有 SIGNAL(itemExpanded(QTreeWidgetItem*))
。
在我的应用程序的 GUI 中,我有 1 个 QTreeWideget 和数千个 QTreeWidgetItem
子项。我可以访问这些 child 的指针。要求是我必须仅在扩展 QTreeWidgetItem
子项时调用 SLOT updateValue
。
我怎样才能做到这一点?
最佳答案
如错误所述,QTreeWidgetItem 不是 Q 对象的子类,也没有任何信号。 QTreeWidget 具有这些,因此请尝试连接它,就像您在代码片段中所做的那样。
QTreeWidget::itemExpanded 信号在它的任何项被展开时发出,并且哪个被展开在它的参数中。
关于c++ - 如何在扩展 QTreeWidgetItem 而不是 QTreeWidget 上调用 SLOT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46824310/