У меня вопрос, может ли мой интерфейс наследовать от QObject и как это сделать? Ну, я знаю, что интерфейсы в C ++ - это просто классы, которые содержат только виртуальные методы, и обычно класс может наследовать от суперкласса. Но если я сделаю это, я получу ошибку из-за неоднозначных ссылок на QObject. Мне нужно унаследовать QObject, чтобы добавить функцию сигналов / слотов в мои плагины.
Мой интерфейс
#ifndef LABELINTERFACE_H
#define LABELINTERFACE_H
#include <QLabel>
#include <QObject>
class LabelInterface : public QObject {
public :
virtual ~LabelInterface() {}
virtual QLabel* newLabel() = 0;
public slots:
virtual void setLabelText() = 0;
};
Q_DECLARE_INTERFACE (LabelInterface,"com.stefan.Plugin.LabelInterface/1.0")
#endif // LABELINTERFACE_H
Заголовочный файл плагина
#ifndef LABELPLUGIN_H
#define LABELPLUGIN_H
#include "labelinterface.h"
class LabelPlugin : public LabelInterface
{
Q_OBJECT
Q_INTERFACES(LabelInterface)
public:
QLabel* label;
QLabel* newLabel();
LabelPlugin() {}
~LabelPlugin() {}
public slots:
void setTextForLabel();
};
#endif // LABELPLUGIN_H
Файл реализации
#include <QtGui>
#include "labelplugin.h"
QLabel* LabelPlugin::newLabel() {
label = new QLabel("This plugin works");
return label;
}
void LabelPlugin::setTextForLabel() {
label->setText("This plugin works fine");
}
// Exporta plugin-ul
Q_EXPORT_PLUGIN2 (labelplugin,LabelPlugin)
Я получаю ошибку
labelplugin.cpp:18: error: cannot allocate an object of abstract type ‘LabelPlugin’