qt中的MVC和接口问题

时间:2011-07-07 18:11:55

标签: model-view-controller qt interface

我想创建视图并通过构造函数将其传递给控制器​​。

所以,我创建了界面:

#include <QString>

class IMainView
{
public:
    virtual ~IMainView() {}
    virtual void setWindowTitle1(QString &title) = 0;
};

Q_DECLARE_INTERFACE(IMainView, "IMainView/1.0");

然后我创建了视图:

class MainWindow : public QMainWindow, IMainView
{
    Q_OBJECT
    Q_INTERFACES(IMainView)
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void setWindowTitle1(QString &title);

private:
    Ui::MainWindow *ui;
};

来自IMainView的MainWindow。 现在我必须将IMainView的实例传递给控制器​​,因为每个控制器注册视图:

#include "maincontroller.h"


MainController::MainController(IMainView *v)
{
    QString title = "my application";
    v->setWindowTitle1(title);
}

MainController::MainController()
{
}

我得到了错误: e:\ pm \ pm \ mainapplication \ IMainView.h:13:错误:C2259:'IMainView':无法实例化抽象类 由于以下成员: 'void IMainView :: setWindowTitle1(QString&amp;)':是抽象的

在C#中它起作用,但在QT中没有。

由于


抱歉,错误的问题。问题在于接口,它是抽象类(iMainView.h):

#include <QString>

class IMainView
{
public:
    virtual ~IMainView() {}
    virtual void setWindowTitle1(QString &title) = 0;
};

Q_DECLARE_INTERFACE(IMainView, "IMainView/1.0");

并且必须将此类附加到mainwindow头文件(mainwindow.h):

#ifndef MAINCONTROLLER_H
#define MAINCONTROLLER_H

#include "IMainView.h"  //here is error


class MainController
{
public:
    //MainController(IMainView *v);
    MainController();


};

#endif // MAINCONTROLLER_H

我收到了错误:

e:\ pm \ pm \ mainapplication \ IMainView.h:13:错误:C2259:'IMainView':无法实例化抽象类 由于以下成员: 'void IMainView :: setWindowTitle1(QString&amp;)':是抽象的

由于

2 个答案:

答案 0 :(得分:0)

您需要在MainWindow类中实现setWindowTitle1,您可能错过了它。这是普通的C ++,对Qt来说并不特别。

答案 1 :(得分:0)

一定要

> #include <QObject>

接口声明之上的某处。 QObject.h包含Q_DECLARE_INTERFACE及其依赖项的定义。