无法从“QAction*”转换为“QAction”

Could not convert from ‘QAction*’ to ‘QAction’

本文关键字:QAction 转换      更新时间:2023-10-16

当我尝试返回值时,我在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 

我不熟悉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 ;

当你做return item时,你返回一个指向QAction的指针,但根据函数的声明,你返回一个QAction,因此出现错误。

所以,你应该这样做:

QAction* SmtdPlugin::newItem() {
    QAction *item = new QAction(NULL);
    return item;
}

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

在您的代码中,您返回一个类型为QAction*的项:

return item; // here i get error

但是你的函数签名要求你返回QAction:

QAction SmtdPlugin::newItem() {

要解决冲突,要么将函数签名更改为

QAction* SmtdPlugin::newItem() {

或修改函数的概念,使其不再返回指针。