Как вы разрабатываете свои классы в Qt с большим количеством виджетов? - PullRequest
0 голосов
/ 12 октября 2018

Я столкнулся с проблемой того, как я должен проектировать свои классы в Qt, чтобы предотвратить грязный код.

В моем MainWindow есть много Buttons, Labels и других виджетов.Я не хочу делать его слишком большим, и я хочу обрабатывать обратные вызовы нажатий кнопок в отдельном классе.

Проблема в том, что я хочу передать всю информацию о Button нажатиях иСтроковые записи в LineEdits для класса максимально просты.Итак, я создал класс (Data), который просто хранит данные.

Другой класс в моем тестовом коде называется MainModule, и он просто выполняет основной цикл и получает результаты кнопкипрессы.Кроме того, я должен отправить изменения, в зависимости от того, что произошло в MainModule, обратно, чтобы я мог установить Labels и так далее.Я сделал это с классами MainWindow и MainModule с указателем на класс данных.

Класс 4 и класс 3 - это только некоторые примеры классов, которые выполняют некоторые другие функции вокруг моего MainModule.Кому-то нужно больше данных, а кому-то меньше, поэтому у них либо есть ссылка на Data, либо они просто передают им некоторые переменные.

Другая проблема, с которой я столкнулся, заключалась в сохранении и загрузке данных.Я должен многое изменить в моих классах, когда я добавляю кнопку или ярлык.Я хочу избавиться от этой высокой связи, не принимая на себя ответственность за класс MainWindow.

UML diagramm

Я также слышал о модели проектирования модель-представление-controller (MVC), который легко справится с этим, но проблема здесь в том, что я не понимаю, как его использовать, когда у меня проблема, что мой MainWindow - это View, но также обрабатывает все элементы управления вв то же время?

1 Ответ

0 голосов
/ 13 октября 2018

Во-первых, вы правы, чтобы быть обеспокоенным.Вы определенно не хотите, чтобы ваши классы брали на себя обязанности, выходящие за рамки их основной функции.Каждый из ваших классов должен иметь определенную и ограниченную по объему цель.Я бы порекомендовал почитать Чистый код дяди Боба для обсуждения этого вопроса.

На ваш вопрос: я полагаю, что в настоящее время вы получаете действия пользователя для QButtons, QLineEdits и т. Д.подключив их различные signals к своим slots (см. Сигналы и слоты Qt ).Чего вам не хватает, так это того, что вы не ограничены подключением данного сигнала только к одному слоту - вы можете подключить их к нескольким слотам в нескольких классах.

Так что, если у вас есть два класса, один пользовательский интерфейссвязанный и один для сбора данных, которые оба должны получить нажатие кнопки, просто подключите щелчок к обоим слотам.Сделайте так, чтобы ваш класс сбора данных наследовал QObject, чтобы он имел механизм сигнал / слоты.

В качестве примера приведу макет изображения (заимствовано из ссылки Qt выше).Я добавил сигнал, нарисованный красным:

enter image description here

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