我收到以下代码的编译错误。我不能对树项使用信号:
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/g++
Windows 7
发布于 2013-09-27 19:30:05
您对连接的发送方使用了错误的类。您使用的是项,而应该使用QTableWidget本身。
如果切换到该位置,并且只设置一次连接,则将调用您的插槽。
发布于 2013-09-27 14:54:19
QTreeWidgetItem不继承QObject,因此它不支持信号/时隙。
void itemClicked(QTreeWidgetItem*, int)是来自QTreeWidget的信号,所以您需要这样做:
QObject::connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(AddSubtree(QTreeWidgetItem*, int)));
另外,请注意-您只需要创建这个连接一次(在构造函数中),而不是对每个项目添加。
https://stackoverflow.com/questions/19053355
复制相似问题