首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从‘QAction*’转换为‘QAction’

无法从‘QAction*’转换为‘QAction’
EN

Stack Overflow用户
提问于 2011-11-23 22:28:14
回答 4查看 744关注 0票数 1

当我试图返回值时,我在smtdplugin实现文件中得到这个错误。好的,我知道我正在创建一个指向QAction的指针,当我试图返回它时,我不能这样做,因为我的方法正在等待对一个对象的引用。但是我不知道该如何行动(我是个乞讨者)如何避免这个问题,并成功地返回该对象

代码语言:javascript
复制
#include "smtdplugin.h"

QAction SmtdPlugin::newItem() {

QAction *item = new QAction(NULL);

    return item; // here i get error
}

Q_EXPORT_PLUGIN2(smtdplugin,SmtdPlugin);

头文件:

代码语言:javascript
复制
#ifndef SMTDPLUGIN_H
#define SMTDPLUGIN_H

#include <QObject>
#include <QAction>
#include "smtdinterface.h"

class SmtdPlugin : public QObject,SmtdInterface  {

    Q_OBJECT
    Q_INTERFACES (SmtdInterface)

public :
    QAction newItem();

};

#endif // SMTDPLUGIN_H

接口类:

代码语言:javascript
复制
#ifndef SMTDINTERFACE_H
#define SMTDONINTERFACE_H

#include <QAction>

class SmtdInterface {

public:
    virtual ~SmtdInterface() {}
    SmtdInterface();
    virtual QAction newItem () = 0;

};

Q_DECLARE_INTERFACE(SmtdInterface,"com.trololo.Plugin.SmtdInterface/1.0")

#endif 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-23 22:32:31

当您执行return item时,您将返回一个指向QAction的指针,但是根据函数的声明,您将返回一个QAction,因此会出现错误。

所以,你应该这样做:

代码语言:javascript
复制
QAction* SmtdPlugin::newItem() {

    QAction *item = new QAction(NULL);

    return item;
}
票数 1
EN

Stack Overflow用户

发布于 2011-11-23 22:31:08

我不熟悉qt,但错误是-

代码语言:javascript
复制
QAction* SmtdPlugin::newItem()   // Return type should be QAction* and not QAction
{

    QAction *item = new QAction(NULL);

    return item;
}

item的类型是QAction*,而不是编译器所抱怨的QAction。我想你对空间有点迷惑了。

代码语言:javascript
复制
QAction* item ; // QAction * item ; QAction *item ;

以上三个约定的含义都是相同的。

票数 2
EN

Stack Overflow用户

发布于 2011-11-23 22:33:16

如果您需要在堆上创建操作,那么最好将返回值更改为QAction*。

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

https://stackoverflow.com/questions/8243823

复制
相关文章

相似问题

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