首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接QTreeWidgetItem时出错

连接QTreeWidgetItem时出错
EN

Stack Overflow用户
提问于 2013-09-27 14:31:19
回答 2查看 1.6K关注 0票数 1

我收到以下代码的编译错误。我不能对树项使用信号:

代码语言:javascript
复制
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)
{
    //...
}

我得到了这个编译时错误:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-27 19:30:05

您对连接的发送方使用了错误的类。您使用的是项,而应该使用QTableWidget本身。

如果切换到该位置,并且只设置一次连接,则将调用您的插槽。

票数 1
EN

Stack Overflow用户

发布于 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)));

另外,请注意-您只需要创建这个连接一次(在构造函数中),而不是对每个项目添加。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19053355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档