Рефакторинг / разбиение исходного файла графического интерфейса Qt

Я создал традиционный графический интерфейс Qt (на основе виджетов), что-то вроде этого: MainWindow::MainWindow(parent) : QMainWindow(parent)

Это разработано Qt Creator как формы (mainwindow.ui) ака Design Mode, Все отлично работает Но код GUI со всеми виджетами, инициализацией соответствующих моделей и функционалом становится длинным. Я хотел бы провести рефакторинг для небольших подразделений. Вещи, которые я придумал:

  1. Я пытался использовать специализированные (производные) виджеты. Пример: созданный MyTableView::QTableView содержит специализированную модель, а также обработку сигнала / слота между моделью и виджетом. Это уменьшает количество кода в MainWindow, Тем не мение, Я теряю возможность разрабатывать графический интерфейс через Qt Creator’s Design mode,
  2. Лучшее, что я придумал, это пролил исходный код (несколько cpp файлы). Он по-прежнему представляет один класс, но меньше кода в одном файле.

Итак, как мне лучше разделить мой класс GUI?

0

Решение

Если вы все еще хотите отсоединить инициализацию виджетов производными виджетами, вы можете использовать опцию «продвинуть в …» в Qt designer. шаги:

  1. класс MyTableView: public QTableView {}, и поэтому инициализация табличного представления перемещается в конструктор MyTableView.
  2. В Qt Designer откройте форму пользовательского интерфейса (MainWidow.ui) и перетащите на нее QTableView;
  3. Щелкните правой кнопкой мыши QTableView, в меню подсказок есть опция «повысить до», откройте ее
  4. В диалоговом окне «Продвижение виджета» укажите имя класса и заголовочный файл вашего пользовательского QTableView, скажем, MyTableView, MyTableView.h. Этот шаг требует существующего пользовательского класса и файла заголовка.

Заимствовал картину:
http://developer.nokia.com/community/wiki/images/thumb/9/90/MBA_promote_to.png/800px-MBA_promote_to.png

1

Другие решения

Вы можете создавать свои собственные виджеты Qt и регистрировать их в QtDesigner. Тогда вы сможете использовать их на формах в качестве простых QLabels и друзей. Увидеть эта ссылка

1

В недавнем проекте у нас были довольно жесткие требования по разобщению (особенно, если бы мы не были слишком сильно связаны с Qt). То, что мы привыкли делать на основе MVC-подобного шаблона:

  • Реализуйте контроллер, который контролирует рабочий процесс приложения
  • Добавьте класс GUI «адаптер» для каждого экрана, который взаимодействует с контроллером. Допустим, класс HomeScreen, класс SecondScreen
  • Каждый класс адаптера содержит заданное количество виджетов: TimelineWidget, FormWidget
  • Каждый виджет состоит из элемента пользовательского интерфейса (Ui :: TimelineWidget ui), который генерируется из файла .ui, созданного с помощью Qt designer.

Обратите внимание, что эта структура может не подходить для небольших проектов.

1
По вопросам рекламы [email protected]