Interface in C++ for Qt

Interface in C++ for Qt

本文关键字:Qt for C++ in Interface      更新时间:2023-10-16

我的问题是,我的接口可以从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)

I get error

labelplugin.cpp:18: error: cannot allocate an object of abstract type ‘LabelPlugin’

忘记实现

virtual void setLabelText() = 0;

你实现

void setTextForLabel();

是不是打错字了?要实例化一个类,需要在基类中重写并实现所有纯虚方法。因为您没有这样做,所以您的类仍然是抽象的。