Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Horna
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 4
1

Действие кнопки в зависимости от состояния элементов подменю

25.04.2014, 14:57. Просмотров 737. Ответов 5
Метки нет (Все метки)

Здравствуйте! В программировании новичок, но взялся за доработку программы, которую разработчик перестал поддерживать. На данный момент формирую панель инструментов. Итак...
На панели инструментов имеется кнопка, в которой содержаться четыре команды меню с чекбоксами, т.е. команда меню имеет два состояния включено-отключено (переключатель).

Изображение
Название: 555.png
Просмотров: 71

Размер: 4.2 Кб

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

Теперь собственно вопрос: Как сделать так, чтобы для команды в меню можно было только установить флажок, а переключение выполнялось при нажатии на общую кнопку для всех пунктов подменю в зависимости от их состояния. Например, отметили 1 и 3 пункты меню, а включение/отключение сеток выполняем нажатием на кнопку. Насколько я понимаю, необходимо как-то запомнить состояние команд меню и в зависимости от сделанного выбора выполнять переключение, но не могу понять, как это можно реализовать.

Вот часть кода с этой кнопкой:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
gridsAction = new QAction(QIcon(":/icons/guides-grids.png"), _("Coordinate grids"), this);
gridsAction->setCheckable(true);
 
QMenu* gridsMenu = new QMenu();
    equatorialGridAction = createCheckableAction(_("Equatorial coordinate grid"), gridsMenu, Renderer::ShowCelestialSphere);
    galacticGridAction   = createCheckableAction(_("Galactic coordinate grid"), gridsMenu, Renderer::ShowGalacticGrid);
    eclipticGridAction   = createCheckableAction(_("Ecliptic coordinate grid"), gridsMenu, Renderer::ShowEclipticGrid);
    horizonGridAction    = createCheckableAction(_("Horizontal coordinate grid"), gridsMenu, Renderer::ShowHorizonGrid);
 
    connect(equatorialGridAction, SIGNAL(triggered()), this, SLOT(slotToggleRenderFlag()));
    connect(galacticGridAction, SIGNAL(triggered()), this, SLOT(slotToggleRenderFlag()));
    connect(eclipticGridAction, SIGNAL(triggered()), this, SLOT(slotToggleRenderFlag()));
    connect(horizonGridAction, SIGNAL(triggered()), this, SLOT(slotToggleRenderFlag()));
 
gridsAction->setMenu(gridsMenu);
 Комментарий модератора 
Все файлы должны быть размещены на форуме!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2014, 14:57
Ответы с готовыми решениями:

Подсвечивание кнопки при наведении в подменю
Добрый день, собственно есть кнопки, при наведении на них они подсвечиваются...

Сохранение состояния элементов...
Приветствую, друзья! Есть одна функция, каторую я незнаю как осуществить так...

Активность кнопки в зависимости от состояния других компонентов
if...

Действие кнопки в зависимости от чекбокса
1)Как сделать так,если чекбокс нажат(стоит галочка),то кнопка выполняет одно...

Отображение кнопки на одной форме в зависимости от состояния Checkbox на другой
Добрый день! Подскажите, пожалуйста, как сделать так, чтобы при установке...

5
alexey_rage
591 / 391 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
25.04.2014, 15:23 2
Боюсь, что готовых решений не существует. Нужно писать свою хитрую обертку на QWidget.
0
Horna
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 4
25.04.2014, 16:50  [ТС] 3
А нельзя ли здесь сделать проверку состояния пункта меню, типа если он отмечен (if checked), то (then) передать его команду переключения на действие кнопки, и наоборот (if not checked). Если отмечено два пункта, то при нажатии на кнопку выполнить последовательно две команды переключения и т.д. Просто я не могу понять, как в QT организуется взаимодействие между различными элементами управления и передача событий между ними.
0
Чистый
Автор FAQ
2713 / 1409 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
25.04.2014, 17:07 4
Лучший ответ Сообщение было отмечено Байт как решение

Решение

ну так вы не вешайте обработчик на сам пункт меню (отмечатся он все равно будет) а вешайте только на сигнал нажатия кнопки, в котором проверяйте состояние пунктов меню и действуйте как надо.
1
Horna
0 / 0 / 0
Регистрация: 25.04.2014
Сообщений: 4
25.04.2014, 18:25  [ТС] 5
Цитата Сообщение от Чистый Посмотреть сообщение
ну так вы не вешайте обработчик на сам пункт меню, а вешайте только на сигнал нажатия кнопки
Т.е. примерно так?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
gridsAction = new QAction(QIcon(":/icons/guides-grids.png"), _("Coordinate grids"), this);
 
connect(gridsAction, SIGNAL(triggered()), this, SLOT(slotMyFunction()));
 
gridsAction->setCheckable(true);
 
QMenu* gridsMenu = new QMenu();
    equatorialGridAction = createCheckableAction(_("Equatorial coordinate grid"), gridsMenu, Renderer::ShowCelestialSphere);
    galacticGridAction   = createCheckableAction(_("Galactic coordinate grid"), gridsMenu, Renderer::ShowGalacticGrid);
    eclipticGridAction   = createCheckableAction(_("Ecliptic coordinate grid"), gridsMenu, Renderer::ShowEclipticGrid);
    horizonGridAction    = createCheckableAction(_("Horizontal coordinate grid"), gridsMenu, Renderer::ShowHorizonGrid);
 
gridsAction->setMenu(gridsMenu);
А затем написать обработку команды slotMyFunction()?
0
Чистый
Автор FAQ
2713 / 1409 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
26.04.2014, 11:32 6
ну типа того, в slotMyFunction и проверяй какие пункты меню кнопки отмечены
1
26.04.2014, 11:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2014, 11:32

Формирование адреса в зависимости от состояния элементов
Привет :) Совсем недавно начал заниматься программированием, а тут уже...

Записать значения в массив в зависимости от состояния элементов CheckedListBox
Здравствуйте! Понемногу изучаю vb10 net, не могу разобраться с...

Сделать одну кнопку, которая будет выполнять сначала действие первой кнопки, а затем действие второй
Здорова. Есть две кнопки, на которых по нажатию выполняются два скрипта: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru