Разработка Qt — структура Qt-приложения.?

Где можно узнать, как выглядит структура проекта Qt? Как разделить пользовательский интерфейс от движка. Хотелось бы узнать все эти тонкости. Сейчас разрабатываю программу STuring (GitHub). Там интерфейс и движок находятся в одном классе. Хотел бы это исправить.
  • Вопрос задан
  • 3945 просмотров
Решения вопроса 2
@tugo
Посмотрите это видео. Вот так, для начала, должна выглядеть структура вашего приложения.
1. Для построения графического интерфейса пользуйтесь Qt Designer (а не размещая врукопашную виджеты, как это делаете вы).
2. В первом, самом простом приложении, должно быть 4 файла исходных кодов.
main.cpp
MainWindow.h
MainWindow.cpp
MainWindow.ui
// MainWindow.h
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget * parent = 0);
    ~MainWindow();

signals:

protected:

private:
    Ui::MainWindow * ui;
};


3. Если количество элементов в MainWindow становится слишком большим, выделяйте элементы в отдельные классы, наследники класса QWidget.
Допустим, у вас в MainWindow расположен элемент Tab Widget, в котором 2 вкладки.
Логично вынести логику работы элементов в каждой вкладке в свой класс, т.е. у вас в проекте должно появиться еще 6 файлов:
MyTabWidget1.h
MyTabWidget1.cpp
MyTabWidget1.ui

MyTabWidget2.h
MyTabWidget2.cpp
MyTabWidget2.ui

// MyTabWidget1.h
#pragma once

#include <QWidget>

namespace Ui {
class MyTabWidget1;
}

class MyTabWidget1: public QWidget
{
    Q_OBJECT

public:
    explicit MyTabWidget1(QWidget * parent = 0);
    ~MyTabWidget1();

private:
    Ui::MyTabWidget1* ui;
};


В классе MainWindow используются объекты классов MyTabWidget1 и MyTabWidget2.
Логика работы MainWindow резко похудеет, все перенесется в MyTabWidget1 и MyTabWidget2.

4. Дальше. Избегайте реализации логики работы класса GUI. Эти классы (MyTabWidget1 и MyTabWidget2, MainWindow) должны быть простыми прокладками, трансляторами сигналов от пользователя в логику работы приложения и визуализаторами состояния приложения пользователю.
Начинаете логику работы приложения реализовывать в отдельном классе.
Обмен информацией между Logic <--> MainWindow возложите на сигналы-слоты.
Ответ написан
Комментировать
@teugen
Призрак алкоголизма.
Каких-то специальных рекомендаций для Qt лично я не видел. Есть общие концепции вроде MVC, MVP и проч.
Прочитайте, например, про model-view в документации того же Qt. Разделите по тому же принципу движок (model) и интерфейс (view). Добавьте во View ссылку на модель и ловите сигналы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы