Russian Qt Forum
Ноябрь 05, 2024, 22:02
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит (Прочитано 3605 раз)
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
:
Ноябрь 14, 2011, 11:55 »
MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделить?
есть несколько редакторов: простой текст и рич текст, редактор форм, xml редактор.
есть общие для этих редакторов команды: Сейв, Ундо, редо, поиск и т.п.
если соединить напрямую сигналами, то при нажатии на акшин команда будет срабатывать во всех активных.
но это неправильно.
есть вариант связать акцию со слотом в главном окне, а потом определять активное окно и посылать сигнал конкретно ему.
может есть еще варианты?
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
Re: MDI интерфейс, несколько типов документов с одинаковыми коммандами, как разделит
«
Ответ #1 :
Ноябрь 14, 2011, 11:56 »
Пробовал использовать qmdilib, но она глючная и я от нее избавляюсь.
Хотелось бы как то автоматизировать и построение меню и панелей пиктограмм.
Подскажите?
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
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
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...