无法从'QAction *'转换为'QAction'

时间:2011-11-23 14:28:14

标签: c++ qt plugins qt4

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

#include "smtdplugin.h"

QAction SmtdPlugin::newItem() {

QAction *item = new QAction(NULL);

    return item; // here i get error
}

Q_EXPORT_PLUGIN2(smtdplugin,SmtdPlugin);

标题文件:

#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

接口类:

#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 

4 个答案:

答案 0 :(得分:2)

我不熟悉qt,但错误是 -

QAction* SmtdPlugin::newItem()   // Return type should be QAction* and not QAction
{

    QAction *item = new QAction(NULL);

    return item;
}

item的类型是 QAction * ,而不是 QAction ,这是编译器抱怨的内容。我觉得你对这个空间感到困惑。

QAction* item ; // QAction * item ; QAction *item ;

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

答案 1 :(得分:1)

执行return item时,您将返回指向QAction的指针,但根据函数的声明,您返回QAction,因此返回错误。

所以,你应该这样做:

QAction* SmtdPlugin::newItem() {

    QAction *item = new QAction(NULL);

    return item;
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在代码中,您返回QAction*类型的项目:

return item; // here i get error

但您的功能签名要求您返回QAction:

QAction SmtdPlugin::newItem() {

要解决冲突,请将功能签名更改为

QAction* SmtdPlugin::newItem() {

或 改变你的函数的概念,这样它就不会再使指针退出。