Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: TaIRou от Июнь 30, 2013, 20:41



Название: Отключение индикатора checked-состояния в QMenu
Отправлено: TaIRou от Июнь 30, 2013, 20:41
Доброго времени суток.

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

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

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

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

Спасибо заранее.


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: Bepec от Июнь 30, 2013, 20:46
Через стайлшиты задайте индикатору полную прозрачность (transparent) - вдруг поможет :P


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: kambala от Июнь 30, 2013, 20:50
да уж, решение точно в духе «мсье» :)

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


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: lit-uriy от Июнь 30, 2013, 21:55
>Может решение черезчур извращенское, тогда подскажите более логичное.
мысль по интерфейсу правильная, где в руководстве макинтошей было более подробное описание этой мысли.

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

Если задача не показывать "шум" пользователю


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: TaIRou от Июнь 30, 2013, 22:22
QMenu::indicator {
transparent: 255;
}

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



Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: Bepec от Июнь 30, 2013, 22:31
Код:
color: transparent;
background-color: transparent;

Насколько я помню как то так ;)

update: позырил - индикатор видимо не совсем то. Приведи, если хочешь моей помощи рисунок. Как сейчас у тебя и как тебе надо. Причем желательно в обоих положениях аля "выделенных"/"невыделенный".


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: kambala от Июнь 30, 2013, 23:19
Цитировать
>Может решение черезчур извращенское, тогда подскажите более логичное.
мысль по интерфейсу правильная, где в руководстве макинтошей было более подробное описание этой мысли.
не припоминаю ни одной программы с таким поведением меню, в том числе и в мак ос. вот то, что при нажатии альта одни пункты меню могут заменяться другими — такое есть.
Цитировать
>можно сделать этому экшену подменю с радиокнопками
зачем?
я исхожу из предположения, что действие одного экшена с разными названиями — похожее.

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


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: Bepec от Июль 01, 2013, 06:46
Тут kambala прав. Я тоже такого не видел. Видел замену пунктов меню при щелчке - это да. Там всё просто, скрывается один, показываем другой на том же месте.


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: TaIRou от Июль 01, 2013, 14:41
хз, как там на маке, под xp выглядит вот так эта ебулда, в состоянии uncheked:

(http://s1.ipicture.ru/uploads/20130701/Mq33iS7G.png)
а в checked-состоянии, прямоугольничка нету.

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

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

надо то всего в меню добавить строчку старт/стоп, включить/выключить, а тут такая эжопея...


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: Bepec от Июль 01, 2013, 16:20
Сча я в душ, выйду - посмотрю.

PS Ответ смотри через одно!


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: kambala от Июль 01, 2013, 16:44
в качестве решения можно в слоте, который вызывается для toggled, отключать соединение, делать setChecked(false) и возвращать соединение.
чем не устраивает-то? всё будет работать и выглядеть без всяких артефактов.


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: Bepec от Июль 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 из-за смены  темы оформления/ операционной системы/ установки дополнительных стайлшитов всё может поплыть. Но это неизбежность :P Надо всё протестить вам будет.


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: Igors от Июль 01, 2013, 17:13
Непонятно что за "цб" тот ф-ционал toggle чтобы прилагать такие усилия для его спасения. Ну просто не включать чеки и ориентироваться по тексту айтема - на худой конец сохранить в переменной.


Название: Re: Отключение индикатора checked-состояния в QMenu
Отправлено: TaIRou от Июль 01, 2013, 20:38
в качестве решения можно в слоте, который вызывается для toggled, отключать соединение, делать setChecked(false) и возвращать соединение.
чем не устраивает-то? всё будет работать и выглядеть без всяких артефактов.

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

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

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

PS доволен?

Так-то вроде работает, поломаю, подумаю, осмыслю)