Название: Режимы редактирования Отправлено: Igors от Ноябрь 21, 2013, 11:33 Добрый день
Есть простое окно имеющее: - Текстовый редактор - Панель сообщений (QTextEdit read-only) - 7-8 кнопарей - список QListWidget - попапку "Режим" Окно должно работать в 2 режимах (переключается попапкой): - редактирование "проекта" (внутренних текстовых данных приложения) - редактирование внешнего файла. Сейчас сделано тупо через "if"ы (если установлен один режим - делаем это, иначе то). Получается не очень хорошо - if'ы ощутимо захламляют методы. Вот если бы это были 2 разных окна - все прекрасно укладывалось бы в простое наследование с виртуалами. Но окно должно быть одно. Какой паттерн (или др решение) Вы бы "порекомендовали"? :) Спасибо Название: Re: Режимы редактирования Отправлено: Bepec от Ноябрь 21, 2013, 12:51 QStackWidget? Вполне вписывается.
Название: Re: Режимы редактирования Отправлено: Igors от Ноябрь 21, 2013, 13:09 QStackWidget? Вполне вписывается. Мне не нужно скрывать одни контролы и показывать другие (ну только зачистить список (его в 1 из режимов нет) и поменять тултипы на паре кнопок - и все). Неприятно что получается многовато кода типа такого:Код И эти if'ы начинают расползаться и проникать во все щели... Название: Re: Режимы редактирования Отправлено: Old от Ноябрь 21, 2013, 17:49 Я бы делал примерно так:
Код
При смене режима меняем указатель m_currentMode. Количество режимов можно расширять, добавляя новые. Название: Re: Режимы редактирования Отправлено: Igors от Ноябрь 21, 2013, 19:55 Я бы делал примерно так: Так да, но возникает страшный невдобняк - UI не принадлежит "пимплам", возникает тонна геттеров/сеттеров. Даже если плюнуть и объявить их friend'ами - все равно не очень. Название: Re: Режимы редактирования Отправлено: Old от Ноябрь 21, 2013, 19:59 Так да, но возникает страшный невдобняк - UI не принадлежит "пимплам", возникает тонна геттеров/сеттеров. Даже если плюнуть и объявить их friend'ами - все равно не очень. Не надо геттеров/сеттеров и друзей. Сделайте контролы публичными. Кстати в Ui:: они и так объявлены публичными. |