2

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

1 回答 1

2

你忘了执行

virtual void setLabelText() = 0;

你实施了

void setTextForLabel();

那是错字吗?要实例化一个类,您需要覆盖并实现基类中的所有纯虚方法。由于您不这样做,因此您的课程仍然是抽象的。

于 2011-12-12T15:32:09.947 回答