MVC в qt и проблема с интерфейсами - PullRequest
0 голосов
/ 07 июля 2011

Я хочу создать представление и передать его в контроллер через конструктор.

Итак, я создал интерфейс:

#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 &)': является абстрактным

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 марта 2016

Обязательно

> #include <QObject>

Где-то выше вашего описания интерфейса. QObject.h содержит определение Q_DECLARE_INTERFACE и его зависимостей.

0 голосов
/ 08 июля 2011

Вам необходимо реализовать setWindowTitle1 в классе MainWindow, который вы, вероятно, пропустили.Это простой C ++ и не особенный для Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...