Russian Qt Forum
Июля 07, 2025, 19:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разноцветные айтемы в попапке  (Прочитано 3759 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Января 16, 2014, 17:52 »

Добрый день

Установить цвет текста в палетке просто, но как отличить один айтем от другого? Пусть я даже сам рисую (стандартными ср-вами и не мечтаю) - все равно ни одной лазейки не оставили, ни одного виртуала в QStyleOption (MenuItem), никаких кастомных данных. Да, виджет я имею, но какой айтем рисуется - хз.

Что скажут акулы UI? И у кого еще есть энтузиазм к "крутому UI" - тоже могут поучаствовать  Улыбающийся

Спасибо
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Января 17, 2014, 02:40 »

это какой виджет? QMenu что ли?
если отрисовка полностью своя (переопределяя paintEvent) - так все равно берется лист QAction и отрисовывается итем за итемом.
если через QStyle::drawControl(), то, вероятно, можно найти итем по его тексту, который передается в QStyleOptionMenuItem::text.
либо, экстремальней, через позицию из QStyleOptionMenuItem::rect.
или в чем проблема?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Bepec
Гость
« Ответ #2 : Января 17, 2014, 07:37 »

Эмм... StyleOption для отрисовки стандартного контрола со стандартным поведением.

Вам же нужен нестандартный контрол.

Можете просто отнаследоваться от QAction и внедрить свой идентификатор. (или QColor color() const;)

Или же просто искать в actions () текущий и ориентироваться на его индекс. Правда не скажу, что список соответствует текущему расположению, хотя думаю так оно и есть.

PS но зная вас, вы будете задавать этот вопрос раза два ещё, не читая ничьих сообщений. А в конце скажете что нить противное Улыбающийся
Записан
carrygun
Гость
« Ответ #3 : Января 17, 2014, 08:58 »

В QMenu action'ы не являются виджетами, поэтому какими-то простыми и стандартными способами это не порешать.
Можно перекрыть paint() у меню, либо рисовать совсем свое.

Можно еще попробовать момент с QWidgetAction, честно признаюсь что сам его не пробовал, но последовательность примерно такова: делаем какой-нибудь QLabel (можно ему и имя задать чтобы потом допустим менять через QSS ему стили), создаем QWidgetAction и пихаем в него наш лейбл, виджетэкшон через addAction пихаем в QMenu. Дальше наверное как обычно. Проверил бы сам, но лениво Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Января 17, 2014, 10:43 »

1) Конечно с paintEvent этой проблемы нет, но такое рисование "не портабельно", напр я не могу его свободно применить к имеющимся меню, а если нет исходников UI - то с приветом. Поэтому рассматриваем рисование через стили

2) Уникальность текста не гарантируется, более того, именно поэтому-то и нужны разные цвета.
либо, экстремальней, через позицию из QStyleOptionMenuItem::rect.
Это мне не приходило в голову  Улыбающийся Однако поиск должен учитывать сепараторы и иконки. И, найдя индекс, что дальше? Нужно как-то подать QHash в рисование и опять возникают проблемы пункта 1

3)
Можно еще попробовать момент с QWidgetAction, честно признаюсь что сам его не пробовал, но последовательность примерно такова: делаем какой-нибудь QLabel (можно ему и имя задать чтобы потом допустим менять через QSS ему стили), создаем QWidgetAction и пихаем в него наш лейбл, виджетэкшон через addAction пихаем в QMenu.
Так будет работать, но тогда он рисует созданный QLabel. И опять-таки не выходит отделаться установкой стиля - нужен свой класс.

В общем сделал так: закодировал цвет в тексте, выглядит так:
Цитировать
Item 1~~##FF0000FF~~   // красный
А на рисовании извлекаю. Конечно это достойно эпитетов "костыль", "через задницу" и.т.п.

2Верес если хотите я отвечу на Ваш пост, правда это будет немного др тема
Записан
Bepec
Гость
« Ответ #5 : Января 17, 2014, 10:49 »

А я хотел помочь. А он... он не принимает мою помощь... Как всё плохо в мире, что люди хотят создавать новую тему чтобы ответить.
PS больше вам предлагать не буду Улыбающийся Но жалко ^.^
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Января 17, 2014, 11:15 »

А я хотел помочь. А он... он не принимает мою помощь... Как всё плохо в мире, что люди хотят создавать новую тему чтобы ответить.
PS больше вам предлагать не буду Улыбающийся Но жалко ^.^
Создавать новый топик не планировал, просто разговор пойдет немного не о том.

Эмм... StyleOption для отрисовки стандартного контрола со стандартным поведением.
Мимо - QStyleOption применяется и для стилей созданных пользователем.

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

Можете просто отнаследоваться от QAction и внедрить свой идентификатор. (или QColor color() const;)
Снова мимо - на момент рисования QStyleOption не знает ничего о существовании QAction

Или же просто искать в actions () текущий и ориентироваться на его индекс. Правда не скажу, что список соответствует текущему расположению, хотя думаю так оно и есть.
Опять наобум, "авось попаду"

PS но зная вас, вы будете задавать этот вопрос раза два ещё, не читая ничьих сообщений. А в конце скажете что нить противное Улыбающийся
К чему этот переход на личности не вызванный никакой необходимостью?

Итак, из 5 Ваших реплик все 5 мимо цели. И так практически с каждым Вашим постом. Не подумали, не вникли в проблему - зато резво отписываетесь. Вы уж пожалуйста как-то улучшите качество и содержательность Ваших постов, а то сейчас просто "оторви да выбрось". Или уменьшите их кол-во (тоже вариант)
Записан
Bepec
Гость
« Ответ #7 : Января 17, 2014, 12:04 »

Зато я узнал для себя новое, уточнил вашу задачу и в целом мы приятно общаемся.
Частично ответ основан на предположении Racheengel о QMenu.

Спасибо за ответ ^_^
PS вот счас почитаю о QStyleOptions подробнее.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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