Не удалось преобразовать из «QAction *» в «QAction» - PullRequest
1 голос
/ 23 ноября 2011

Я получаю эту ошибку в моем файле реализации 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 ]

2 голосов
/ 23 ноября 2011

Я не знаком с 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 голос
/ 23 ноября 2011

Когда вы делаете return item, вы возвращаете указатель на QAction, но в соответствии с объявлением функции вы возвращаете QAction, следовательно, ошибка.

Итак, вы должны сделать:

QAction* SmtdPlugin::newItem() {

    QAction *item = new QAction(NULL);

    return item;
}
0 голосов
/ 23 ноября 2011

В вашем коде вы возвращаете элемент типа QAction*:

return item; // here i get error

, но ваша подпись функции требует, чтобы вы вернули QAction:

QAction SmtdPlugin::newItem() {

Для решенияконфликтуйте, либо измените сигнатуру функции на

QAction* SmtdPlugin::newItem() {

, либо измените концепцию вашей функции, чтобы она больше не повторяла указатель.

0 голосов
/ 23 ноября 2011

Если вам нужно создать действие в куче, то, вероятно, лучше всего изменить возвращаемое значение на QAction *.

...