2015-12-15 3 views
3

Я разрабатываю инструмент тестирования сети, который имеет графический интерфейс пользователя. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я не могу отделить базовые данные от классов GUI. Приложение состоит из QMainWindow, которое затем порождает несколько других QDialogs и имеет некоторые QWidgets. В каждом из этих классов есть некоторая функциональность с использованием QLineEdits, QPushButtons и т. Д., А также данные хранятся в каждом классе. Сейчас, для того, чтобы использовать данные об устройстве от, например, DeviceDiscovery Widget в MainWindow мне нужно использоватьОтделив обработку данных от GUI

deviceId = self.widget_deviceDiscovery.devices['devName'].id 

вместо того, чтобы быть в состоянии хранить его вне всего графического интерфейса. Но как я мог это сделать? Кажется, не правильно хранить данные в классах GUI.

+1

Что касается класса 'Data' с экземплярами других классов, которые получают доступ к свойствам Data? Таким образом, все данные будут в одном классе ... – albert

ответ

2

Неправильно хранить данные в классах GUI.

Конечно, нет, но опять же я не вижу, как можно что-либо хранить в пользовательском интерфейсе. Данные хранятся в файлах. Если вы имеете в виду, что вы получаете контент из объектов вида и применяете его, когда происходит какое-либо действие, это обычно нормально (ish).

Например, у вас есть экран входа в систему с двумя редактируемыми текстовыми представлениями и кнопкой. При нажатии кнопки где-то в коде есть компонент (обычно похожий на Observer), который извлекает значения из текстовых представлений и инициирует процесс входа в систему. Это ваши стандартные графические интерфейсы, и это нормально, так как эти структуры фактически разделены дизайном, поскольку они обычно следуют шаблонам MVC/P. Данные и BL остаются обработаны вами, потому что они, очевидно, являются специфическими для приложения.

Недостатком в этих рамках является то, что тестирование становится несколько сложным, и состояние вытягивается из виджетов. Когда предполагается, что различные интерфейсы пользовательского интерфейса поддерживаются, управление штатом переписывается на каждую фреймворк, что является накладными расходами.

Существует шаблон под названием Presentation Model, который полностью разделяет два слоя (графический интерфейс пользователя из презентации) и позволяет обрабатывать два понятия в разных слоях. Большинство обязательных рамок основаны на этой концепции.

Смежные вопросы