我想創建視圖並通過構造函數將它傳遞給控制器。qt中的MVC和接口問題
所以,我創建的接口:
#include <QString>
class IMainView
{
public:
virtual ~IMainView() {}
virtual void setWindowTitle1(QString &title) = 0;
};
Q_DECLARE_INTERFACE(IMainView, "IMainView/1.0");
然後我創建的視圖:從IMainView
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到控制器的情況下,因爲每個控制器寄存器觀點:
#include "maincontroller.h"
MainController::MainController(IMainView *v)
{
QString title = "my application";
v->setWindowTitle1(title);
}
MainController::MainController()
{
}
而且我得到了錯誤: E:\時\分\ mainapplication \ IMainView.h:13:錯誤:C2259: 'IMainView': '無效IMainView :: setWindowTitle1(QString的&)':不能因下列成員實例化抽象類 是抽象
在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.h):
#ifndef MAINCONTROLLER_H
#define MAINCONTROLLER_H
#include "IMainView.h" //here is error
class MainController
{
public:
//MainController(IMainView *v);
MainController();
};
#endif // MAINCONTROLLER_H
和我錯誤:
E:\時\時\ mainapplication \ IMainView.h:13:錯誤:C2259: 'IMainView':不能實例抽象類 由於以下成員: 「空隙IMainView :: setWindowTitle1(即QString &) ':是abs道
感謝
哪一行是它所抱怨的第13行。 –
某處,您正在聲明或試圖實例化一個不允許的純IMainView實例。如果它不在您的代碼中,您可以嘗試仔細檢查由Q_DECLARE_INTERFACE宏生成的預處理代碼。 –