Russian Qt Forum
Сентябрь 30, 2024, 22:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отключение индикатора checked-состояния в QMenu  (Прочитано 6838 раз)
TaIRou
Гость
« : Июнь 30, 2013, 20:41 »

Доброго времени суток.

Для QAction добавляемых в QMenu, есть возможность делать их chekable, но при этом отображается индикатор, показывающий отмечен ли пункт меню или нет. Так вот нужно, чтобы QActoion сохранило свой функционал в плане выдачи сигнала toggled(bool), но при этом конкретное QMenu, к которому оно добавлено не отображало этот индикатор.

(планируется создать QAction, с меняющимся в зависимости от состояния текстом его названия, поэтому индикатор не нужен и даже не логичен)

Может решение черезчур извращенское, тогда подскажите более логичное.

Пробовал отключать отображение индикатора через styleSheet, но не получилось, потому что за место индикатора, стал отображаться какой-то утопленный прямоугольник.

Спасибо заранее.
Записан
Bepec
Гость
« Ответ #1 : Июнь 30, 2013, 20:46 »

Через стайлшиты задайте индикатору полную прозрачность (transparent) - вдруг поможет Показает язык
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Июнь 30, 2013, 20:50 »

да уж, решение точно в духе «мсье» Улыбающийся

можно сделать этому экшену подменю с радиокнопками
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июнь 30, 2013, 21:55 »

>Может решение черезчур извращенское, тогда подскажите более логичное.
мысль по интерфейсу правильная, где в руководстве макинтошей было более подробное описание этой мысли.

>можно сделать этому экшену подменю с радиокнопками
зачем?

Если задача не показывать "шум" пользователю
« Последнее редактирование: Июнь 30, 2013, 21:57 от lit-uriy » Записан

Юра.
TaIRou
Гость
« Ответ #4 : Июнь 30, 2013, 22:22 »

QMenu::indicator {
transparent: 255;
}

это имелось в виду?
такого свойства нету...

Записан
Bepec
Гость
« Ответ #5 : Июнь 30, 2013, 22:31 »

Код:
color: transparent;
background-color: transparent;

Насколько я помню как то так Подмигивающий

update: позырил - индикатор видимо не совсем то. Приведи, если хочешь моей помощи рисунок. Как сейчас у тебя и как тебе надо. Причем желательно в обоих положениях аля "выделенных"/"невыделенный".
« Последнее редактирование: Июнь 30, 2013, 23:01 от Bepec » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #6 : Июнь 30, 2013, 23:19 »

Цитировать
>Может решение черезчур извращенское, тогда подскажите более логичное.
мысль по интерфейсу правильная, где в руководстве макинтошей было более подробное описание этой мысли.
не припоминаю ни одной программы с таким поведением меню, в том числе и в мак ос. вот то, что при нажатии альта одни пункты меню могут заменяться другими — такое есть.
Цитировать
>можно сделать этому экшену подменю с радиокнопками
зачем?
я исхожу из предположения, что действие одного экшена с разными названиями — похожее.

в качестве решения можно в слоте, который вызывается для toggled, отключать соединение, делать setChecked(false) и возвращать соединение.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #7 : Июль 01, 2013, 06:46 »

Тут kambala прав. Я тоже такого не видел. Видел замену пунктов меню при щелчке - это да. Там всё просто, скрывается один, показываем другой на том же месте.
Записан
TaIRou
Гость
« Ответ #8 : Июль 01, 2013, 14:41 »

хз, как там на маке, под xp выглядит вот так эта ебулда, в состоянии uncheked:


а в checked-состоянии, прямоугольничка нету.

QMenu::indicator {
background-color: transparent;
}

color: transparent; - добавление этой строчки никакого визуального эффекта не принесло (вроде бы)

надо то всего в меню добавить строчку старт/стоп, включить/выключить, а тут такая эжопея...
Записан
Bepec
Гость
« Ответ #9 : Июль 01, 2013, 16:20 »

Сча я в душ, выйду - посмотрю.

PS Ответ смотри через одно!
« Последнее редактирование: Июль 01, 2013, 16:59 от Bepec » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #10 : Июль 01, 2013, 16:44 »

в качестве решения можно в слоте, который вызывается для toggled, отключать соединение, делать setChecked(false) и возвращать соединение.
чем не устраивает-то? всё будет работать и выглядеть без всяких артефактов.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #11 : Июль 01, 2013, 17:03 »

Код:
 QMenu::indicator:non-exclusive:checked {
   image: url(:/images/NoExistImage.png);
 }

QMenu::item {
     padding: 2px 25px 2px 20px;
     border: 1px solid transparent;
 }

 QMenu::item:selected {
     border-color: darkblue;
     background: rgba(100, 100, 100, 150);
 }

Маленькая махинация и использование костылика - полученный результат вас должен удовлетворить.

Вкратце -
1) Делаем пустым место под иконку указанием несуществующей картинки. (в результате то окошко вдавленное схлопывается)
2) Далее выделяем в итеме место чтобы наш итем не выделялся (был похож на другие). А то надпись будет начинаться сразу с начала прямоугольника.
3) делаем выделение (Тут уже маленький косяк с определением итема, насколько я понимаю, но уж как мог, так помог). Подобрать нужный цвет выделения проще простого.

PS доволен?

PPS из-за смены  темы оформления/ операционной системы/ установки дополнительных стайлшитов всё может поплыть. Но это неизбежность Показает язык Надо всё протестить вам будет.
« Последнее редактирование: Июль 01, 2013, 17:05 от Bepec » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Июль 01, 2013, 17:13 »

Непонятно что за "цб" тот ф-ционал toggle чтобы прилагать такие усилия для его спасения. Ну просто не включать чеки и ориентироваться по тексту айтема - на худой конец сохранить в переменной.
Записан
TaIRou
Гость
« Ответ #13 : Июль 01, 2013, 20:38 »

в качестве решения можно в слоте, который вызывается для toggled, отключать соединение, делать setChecked(false) и возвращать соединение.
чем не устраивает-то? всё будет работать и выглядеть без всяких артефактов.

ды, я просто комментировать не стал, как-то не сложилось в моей практике коннекты/дисконнекты творить... Думал что-нибудь прозрачное и ясное найти. Спасибо!)

Непонятно что за "цб" тот ф-ционал toggle чтобы прилагать такие усилия для его спасения. Ну просто не включать чеки и ориентироваться по тексту айтема - на худой конец сохранить в переменной.

Сейчас так-то и сделано, но я думал, что за лажа такую фигульку-то наверняка можно отключить, пацаны наверняка знают Подмигивающий

PS доволен?

Так-то вроде работает, поломаю, подумаю, осмыслю)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 23.