Ошибка при подключении QTreeWidgetItem

Я получаю ошибку компиляции для следующего кода. Я не могу использовать сигналы с элементами дерева:

class MyClass : public QObject
{
Q_OBJECT

public:
int Grow();

public slots:
void AddSubtree(QTreeWidgetItem *_jobItem, int _column);

private:
void AddSubtree(QTreeWidgetItem *_jobItem, const QString &_filePath);
};

int MyClass::Grow()
{
...
foreach(QFileInfo fileInfo, filesList)
{
if(fileInfo.isDir())
{
const QString tag = fileInfo.fileName();

QTreeWidgetItem* item = new QTreeWidgetItem();
item->setText(0, tag);

// This works, but it is performance critical! Do it on demand
//AddRunSubtree(item, fileInfo.filePath());

// Load this tag's subtree on demand when clicked (error on this line)
QObject::connect(item, SIGNAL(itemClicked(QTreeWidgetItem*, int col)),
this, SLOT(AddSubtree(QTreeWidgetItem*, int col)));

parentItem->addChild(item);
}
}
}

void MyClass::AddSubtree(QTreeWidgetItem *_jobItem, int _column)
{
//...
}

void MyClass::AddSubtree(QTreeWidgetItem *_jobItem, const QString &_filePath)
{
//...
}

Я получаю эту ошибку времени компиляции:

error: no matching function for call to 'MyClass::connect(QTreeWidgetItem*&, const char*, MyClass* const, const char*)'

Candidates are:

c:\Qt\4.8.5\src\corelib\kernel\qobject.h:204: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
c:\Qt\4.8.5\src\corelib\kernel\qobject.h:204: note:   no known conversion for argument 1 from 'QTreeWidgetItem*' to 'const QObject*'

c:\Qt\4.8.5\src\corelib\kernel\qobject.h:217: static bool QObject::connect(const QObject*, const QMetaMethod&, const QObject*, const QMetaMethod&, Qt::ConnectionType)
c:\Qt\4.8.5\src\corelib\kernel\qobject.h:217: note:   no known conversion for argument 1 from 'QTreeWidgetItem*' to 'const QObject*'

c:\Qt\4.8.5\src\corelib\kernel\qobject.h:337: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const
c:\Qt\4.8.5\src\corelib\kernel\qobject.h:337: note:   no known conversion for argument 1 from 'QTreeWidgetItem*' to 'const QObject*'

Глядя на определение QTreeWidgetItem, он фактически не наследуется от QObject. Означает ли это, что я не могу сделать выбор ветви дерева генерировать сигнал?

Если это возможно, что не так с моим кодом?

Почему сообщение об ошибке содержит «MyClass :: connect» вместо «QObject :: connect»?

Платформа:
Qt 4.8.5
MinGW / г ++
Windows 7

1

Решение

Вы используете неправильный класс для отправителя соединения. Вы используете предмет, тогда как вы должны использовать QTableWidget сам.

Если вы переключитесь на это, и вы установили соединение один раз, ваш слот будет вызван.

1

Другие решения

QTreeWidgetItem не наследуется от QObject, так что это означает, что он не поддерживает сигналы / слоты.

void itemClicked(QTreeWidgetItem*, int) это сигнал от QTreeWidgetтак что вам нужно сделать это следующим образом:

QObject::connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)),
this, SLOT(AddSubtree(QTreeWidgetItem*, int)));

Также небольшая заметка — вам нужно создать это соединение только один раз (в конструкторе), а не при каждом добавлении элемента.

2

По вопросам рекламы [email protected]