我想创建视图并通过构造函数将其传递给控制器。
所以,我创建了界面:
#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;)':是抽象的
由于
答案 0 :(得分:0)
您需要在MainWindow类中实现setWindowTitle1,您可能错过了它。这是普通的C ++,对Qt来说并不特别。
答案 1 :(得分:0)
一定要
> #include <QObject>
接口声明之上的某处。 QObject.h包含Q_DECLARE_INTERFACE及其依赖项的定义。