Я хочу создать представление и передать его в контроллер через конструктор.
Итак, я создал интерфейс:
#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;
};
MainWindow из IMainView.
Теперь я должен передать экземпляр 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 &)': является абстрактным
В 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 &)': является абстрактным
Спасибо