Russian Qt Forum
Мая 14, 2025, 01:39
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит (Прочитано 3736 раз)
panAlexey
Гипер активный житель
Offline
Сообщений: 865
Акцио ЗАРПЛАТА!!!!! :(
MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
:
Ноября 14, 2011, 11:55 »
MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделить?
есть несколько редакторов: простой текст и рич текст, редактор форм, xml редактор.
есть общие для этих редакторов команды: Сейв, Ундо, редо, поиск и т.п.
если соединить напрямую сигналами, то при нажатии на акшин команда будет срабатывать во всех активных.
но это неправильно.
есть вариант связать акцию со слотом в главном окне, а потом определять активное окно и посылать сигнал конкретно ему.
может есть еще варианты?
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
panAlexey
Гипер активный житель
Offline
Сообщений: 865
Акцио ЗАРПЛАТА!!!!! :(
Re: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
Ответ #1 :
Ноября 14, 2011, 11:56 »
Пробовал использовать qmdilib, но она глючная и я от нее избавляюсь.
Хотелось бы как то автоматизировать и построение меню и панелей пиктограмм.
Подскажите?
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
panAlexey
Гипер активный житель
Offline
Сообщений: 865
Акцио ЗАРПЛАТА!!!!! :(
Re: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
Ответ #2 :
Ноября 14, 2011, 17:49 »
Ап. тема горит.
«
Последнее редактирование: Ноября 14, 2011, 17:55 от panAlexey
»
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
Denis.Rassvetniy
Гость
Re: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
Ответ #3 :
Ноября 19, 2011, 19:26 »
Мой дилетантский совет:
создайте какой-нибудь ActionManager, который будет определять активный редактор и вызывать его методы save(), cut(), copy(), etc. Экшены соединяйте с этим менеджером.
А вообще хотелось бы услышать мнение профессионалов.
«
Последнее редактирование: Ноября 19, 2011, 19:28 от Denis.Rassvetniy
»
Записан
asvil
Гость
Re: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
Ответ #4 :
Ноября 19, 2011, 20:57 »
Я делал actionmanager, который отслеживал текущее фокусное окно, и в зависимости от наличия в этом окне слотов cut, copy, paste, undo, redo включал/выключал соответсвующие actions. кроме того после этого данный менеджер сигнал triggered соединял со одноименным слотом фокусного виджета.
Для редактирования текста сойдет, для tableview уже надо наследовать tableview со всеми вытекающими.
могу выложить исходик, который может быть использован примерно так:
Код:
am = new ActionManager();
am.addWidget(editMenu);
am.addWidget(editToolBar);
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
Ответ #5 :
Ноября 20, 2011, 01:31 »
Я уже где-то рассказывал тут... Я делал так - есть экшны в менюшках, с дефолтными текстом, иконкой, шорткатом. У них есть ид (например для копи "action.copy"). И есть экшны в виджетах, каждый зарегистрирован в экшн менеджере с определенным айдишником (к примеру, ид экшна копирования должен совпадать с ид экшна копирования в меню - "action.copy"). При переключении фокуса и/или скрытии/показывании виджета его экшны связываются с экшнами в меню - при триггеринге экшна в меню триггерится экшн в виджете и наоборот; при смене текста/иконки/шортката экшна в виджете меняется текст/иконка/шорткат экшна в меню. Это позволяет делать не только стандартные экшны типа копи/паст/анду/реду, но и менять текст экшна меню в зависимости от виджета в фокусе (полезно для анду/реду), а также состояние всех экшнов виджета остается консистентным с виджетом.
Схема подсмотрена в Qt Creator'e, но там чуть по-другому (экшны не привязаны к виджетам, а привязаны к определенному классу - ручками определяется какой виджет текущий и ручками поддерживается консистентное состояние экшнов и текущего виджета)
Записан
panAlexey
Гипер активный житель
Offline
Сообщений: 865
Акцио ЗАРПЛАТА!!!!! :(
Re: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
Ответ #6 :
Ноября 20, 2011, 13:47 »
Цитата: Авварон от Ноября 20, 2011, 01:31
Схема подсмотрена в Qt Creator'e, но там чуть по-другому (экшны не привязаны к виджетам, а привязаны к определенному классу - ручками определяется какой виджет текущий и ручками поддерживается консистентное состояние экшнов и текущего виджета)
Приблизительно так и сделал.
QAction в главном окне, мидичилды наследуются от uoAbstractMDIChild, а у него есть
virtual void onActivate(QMainWindow* mWnd ) = 0;
virtual void onDeactivate(QMainWindow* mWnd ) = 0;
bool isActiveMdiWindow(QWidget* wi);
в onActivate чилд добавляет свои менюхи в QMainWindow.
«
Последнее редактирование: Ноября 20, 2011, 13:50 от panAlexey
»
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...