Название: Разноцветные айтемы в попапке Отправлено: Igors от Января 16, 2014, 17:52 Добрый день
Установить цвет текста в палетке просто, но как отличить один айтем от другого? Пусть я даже сам рисую (стандартными ср-вами и не мечтаю) - все равно ни одной лазейки не оставили, ни одного виртуала в QStyleOption (MenuItem), никаких кастомных данных. Да, виджет я имею, но какой айтем рисуется - хз. Что скажут акулы UI? И у кого еще есть энтузиазм к "крутому UI" - тоже могут поучаствовать :) Спасибо Название: Re: Разноцветные айтемы в попапке Отправлено: Racheengel от Января 17, 2014, 02:40 это какой виджет? QMenu что ли?
если отрисовка полностью своя (переопределяя paintEvent) - так все равно берется лист QAction и отрисовывается итем за итемом. если через QStyle::drawControl(), то, вероятно, можно найти итем по его тексту, который передается в QStyleOptionMenuItem::text. либо, экстремальней, через позицию из QStyleOptionMenuItem::rect. или в чем проблема? Название: Re: Разноцветные айтемы в попапке Отправлено: Bepec от Января 17, 2014, 07:37 Эмм... StyleOption для отрисовки стандартного контрола со стандартным поведением.
Вам же нужен нестандартный контрол. Можете просто отнаследоваться от QAction и внедрить свой идентификатор. (или QColor color() const;) Или же просто искать в actions () текущий и ориентироваться на его индекс. Правда не скажу, что список соответствует текущему расположению, хотя думаю так оно и есть. PS но зная вас, вы будете задавать этот вопрос раза два ещё, не читая ничьих сообщений. А в конце скажете что нить противное :) Название: Re: Разноцветные айтемы в попапке Отправлено: carrygun от Января 17, 2014, 08:58 В QMenu action'ы не являются виджетами, поэтому какими-то простыми и стандартными способами это не порешать.
Можно перекрыть paint() у меню, либо рисовать совсем свое. Можно еще попробовать момент с QWidgetAction, честно признаюсь что сам его не пробовал, но последовательность примерно такова: делаем какой-нибудь QLabel (можно ему и имя задать чтобы потом допустим менять через QSS ему стили), создаем QWidgetAction и пихаем в него наш лейбл, виджетэкшон через addAction пихаем в QMenu. Дальше наверное как обычно. Проверил бы сам, но лениво :) Название: Re: Разноцветные айтемы в попапке Отправлено: Igors от Января 17, 2014, 10:43 1) Конечно с paintEvent этой проблемы нет, но такое рисование "не портабельно", напр я не могу его свободно применить к имеющимся меню, а если нет исходников UI - то с приветом. Поэтому рассматриваем рисование через стили
2) Уникальность текста не гарантируется, более того, именно поэтому-то и нужны разные цвета. либо, экстремальней, через позицию из QStyleOptionMenuItem::rect. Это мне не приходило в голову :) Однако поиск должен учитывать сепараторы и иконки. И, найдя индекс, что дальше? Нужно как-то подать QHash в рисование и опять возникают проблемы пункта 13) Можно еще попробовать момент с QWidgetAction, честно признаюсь что сам его не пробовал, но последовательность примерно такова: делаем какой-нибудь QLabel (можно ему и имя задать чтобы потом допустим менять через QSS ему стили), создаем QWidgetAction и пихаем в него наш лейбл, виджетэкшон через addAction пихаем в QMenu. Так будет работать, но тогда он рисует созданный QLabel. И опять-таки не выходит отделаться установкой стиля - нужен свой класс.В общем сделал так: закодировал цвет в тексте, выглядит так: Цитировать Item 1~~##FF0000FF~~ // красный А на рисовании извлекаю. Конечно это достойно эпитетов "костыль", "через задницу" и.т.п.2Верес если хотите я отвечу на Ваш пост, правда это будет немного др тема Название: Re: Разноцветные айтемы в попапке Отправлено: Bepec от Января 17, 2014, 10:49 А я хотел помочь. А он... он не принимает мою помощь... Как всё плохо в мире, что люди хотят создавать новую тему чтобы ответить.
PS больше вам предлагать не буду :) Но жалко ^.^ Название: Re: Разноцветные айтемы в попапке Отправлено: Igors от Января 17, 2014, 11:15 А я хотел помочь. А он... он не принимает мою помощь... Как всё плохо в мире, что люди хотят создавать новую тему чтобы ответить. Создавать новый топик не планировал, просто разговор пойдет немного не о том. PS больше вам предлагать не буду :) Но жалко ^.^ Эмм... StyleOption для отрисовки стандартного контрола со стандартным поведением. Мимо - QStyleOption применяется и для стилей созданных пользователем.Вам же нужен нестандартный контрол. Опять мимо - разноцветные айтемы не значит "нестандартный контрол"Можете просто отнаследоваться от QAction и внедрить свой идентификатор. (или QColor color() const;) Снова мимо - на момент рисования QStyleOption не знает ничего о существовании QAction Или же просто искать в actions () текущий и ориентироваться на его индекс. Правда не скажу, что список соответствует текущему расположению, хотя думаю так оно и есть. Опять наобум, "авось попаду"PS но зная вас, вы будете задавать этот вопрос раза два ещё, не читая ничьих сообщений. А в конце скажете что нить противное :) К чему этот переход на личности не вызванный никакой необходимостью?Итак, из 5 Ваших реплик все 5 мимо цели. И так практически с каждым Вашим постом. Не подумали, не вникли в проблему - зато резво отписываетесь. Вы уж пожалуйста как-то улучшите качество и содержательность Ваших постов, а то сейчас просто "оторви да выбрось". Или уменьшите их кол-во (тоже вариант) Название: Re: Разноцветные айтемы в попапке Отправлено: Bepec от Января 17, 2014, 12:04 Зато я узнал для себя новое, уточнил вашу задачу и в целом мы приятно общаемся.
Частично ответ основан на предположении Racheengel о QMenu. Спасибо за ответ ^_^ PS вот счас почитаю о QStyleOptions подробнее. |