我收到以下代碼的編譯錯誤。我無法與樹項目使用信號:連接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 /克++
視窗7
我做了你寫的東西,並且編譯時錯誤消失了。但是,在運行時,SLOT永遠不會被調用。爲了確保這一點,我在其執行中放了一個'exit(1)',但沒有任何效果。 – Pietro
你有沒有在樹中的任何項目?只有當用戶點擊該項目時,纔會發出'itemClicked'信號。 – Johny