Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alex Custov от Июнь 22, 2009, 18:53



Название: qmenu с большими иконками
Отправлено: Alex Custov от Июнь 22, 2009, 18:53
По умолчанию все иконки элементов QMenu масштабируются к фиксированному размеру, судя по всему 16x16. Возможно ли отображать элементы QMenu с иконками разного размера? Например чтобы первый элемент имел иконку 22x22, второй - 25x20 и т.д.?


Название: Re: qmenu с большими иконками
Отправлено: Barmaglodd от Июнь 23, 2009, 08:29
Если найдёте решение, напишите, тоже интересует.


Название: Re: qmenu с большими иконками
Отправлено: mugabe от Июнь 24, 2009, 04:08
Мне интересно, для чего это?


Название: Re: qmenu с большими иконками
Отправлено: spectre71 от Июнь 24, 2009, 07:44
Мне интересно, для чего это?
Ну, разные элементы с разными размерами иконок в меню это действительно фигня, а вот установка для меню размера иконок это даже очень полезно!
Странно что у QToolBar есть setIconSize, а у QMenu нет!


Название: Re: qmenu с большими иконками
Отправлено: Karl-Philipp от Июнь 24, 2009, 08:35
Мне интересно, для чего это?
Ну, разные элементы с разными размерами иконок в меню это действительно фигня, а вот установка для меню размера иконок это даже очень полезно!
Странно что у QToolBar есть setIconSize, а у QMenu нет!
Spectre71, ты имеешь в виду одноразовую установку единого размера для всех иконок меню?


Название: Re: qmenu с большими иконками
Отправлено: spectre71 от Июнь 24, 2009, 08:39
Spectre71, ты имеешь в виду одноразовую установку единого размера для всех иконок меню?
Да.


Название: Re: qmenu с большими иконками
Отправлено: Karl-Philipp от Июнь 24, 2009, 08:54
А что если унаследоваться, например, от QIcon, в конструкторе которого задавать константные размеры, требуемые для всех иконок меню?


Название: Re: qmenu с большими иконками
Отправлено: spectre71 от Июнь 24, 2009, 09:08
А что если унаследоваться, например, от QIcon, в конструкторе которого задавать константные размеры, требуемые для всех иконок меню?
Как ты это себе представляешь? И причем здесь меню в контексте QIcon.
Меню для элемента берет QIcon из QAction, и если QIcon валидна, берет наиболее подходящий по размеру QPixmap(для нужного состояния) и ресайзит его если есть необходимость.


Название: Re: qmenu с большими иконками
Отправлено: Karl-Philipp от Июнь 24, 2009, 09:27
>>Как ты это себе представляешь? И причем здесь меню в контексте QIcon.
Цитировать
QAction * QMenu::addAction ( const QIcon & icon, const QString & text )

>>Меню для элемента берет QIcon из QAction, и если QIcon валидна, берет наиболее подходящий по размеру QPixmap...

Можно же принудительно указать размеры QPixmap:
Цитировать
QPixmap ( int width, int height )


Название: Re: qmenu с большими иконками
Отправлено: spectre71 от Июнь 24, 2009, 09:46
У QPixmap и без "принудительно" всегда есть конкретный размер!
Пишу еще раз, читай внимательно!
Меню для элемента берет QIcon из QAction, и если QIcon валидна, берет наиболее подходящий по размеру QPixmap(для нужного состояния) и РЕСАЙЗИТ ЕГО  если есть необходимость. А необходимость, если размеры выбранного QPixmap не 16х16 для QMenu или не iconSize для QToolBar


Название: Re: qmenu с большими иконками
Отправлено: Karl-Philipp от Июнь 24, 2009, 11:10
>>А необходимость, если размеры выбранного QPixmap не 16х16 для QMenu или не iconSize для QToolBar
Тогда можно попробовать обосновать и написать feature request.


Название: Re: qmenu с большими иконками
Отправлено: spectre71 от Июнь 24, 2009, 11:20
>>А необходимость, если размеры выбранного QPixmap не 16х16 для QMenu или не iconSize для QToolBar
Тогда можно попробовать обосновать и написать feature request.
Давай, напиши!
Я не настолько хорошо знаю английский.


Название: Re: qmenu с большими иконками
Отправлено: Пантер от Июнь 24, 2009, 11:45
Это не стандартное поведение. Где вы встречали в меню не стандартные иконки? Так что feature request обломают. Да и не нужно оно. Хотите устанавливать размер иконок, пишите свою реализацию меню.


Название: Re: qmenu с большими иконками
Отправлено: Karl-Philipp от Июнь 24, 2009, 11:46
рихтаните, если что не так

requesting: functionality for resizing icons' sizes in the QMenu.

By default all of icons of the QMenu are scaled to the fixed size.
It would be very suit to have the method for resizing icons' sizes in the QMenu. This method is intended to be similar to setIconSize() method in QToolBar class.


Название: Re: qmenu с большими иконками
Отправлено: Alex Custov от Июнь 24, 2009, 11:58
Это не стандартное поведение. Где вы встречали в меню не стандартные иконки?

например в gliv, там в меню находятся тумбы изображений.

Да и не нужно оно.

Нужно-нужно ;)


Название: Re: qmenu с большими иконками
Отправлено: spectre71 от Июнь 24, 2009, 12:01
Это не стандартное поведение. Где вы встречали в меню не стандартные иконки? Так что feature request обломают. Да и не нужно оно. Хотите устанавливать размер иконок, пишите свою реализацию меню.
В чем нестандартность?
Я не вижу причин против.
Не всегда нормальные иконки для меню можно нарисовать 16x16. Иногда требуется больший размер.
Естественно что размер иконок для QMenu должен быть единым как и для QToolBar.
А писать свою реализацию меню из-за этого :'(


Название: Re: qmenu с большими иконками
Отправлено: SABROG от Июнь 24, 2009, 12:05
Размеры берутся из стилей. Создай свой стиль и переопредели метод:
int QStyle::pixelMetric ( PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0 ) const   [pure virtual]

На QStyle::PM_SmallIconSize возвращай свой размер. Максимум, что это поможет сделать - увеличить размер иконок (правда неизвестно где это еще может всплыть). Без редактирования исходников Qt сделать разный размер иконок не получится, поэтому единственным выходом будет сделать максимально возможный размер, который предполагается и врисовывать в этот QPixmap иконки меньшего размера самому.


Название: Re: qmenu с большими иконками
Отправлено: Alex Custov от Июнь 24, 2009, 12:12
Размеры берутся из стилей. Создай свой стиль и переопредели метод:
int QStyle::pixelMetric ( PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0 ) const   [pure virtual]

На QStyle::PM_SmallIconSize возвращай свой размер. Максимум, что это поможет сделать - увеличить размер иконок (правда неизвестно где это еще может всплыть). Без редактирования исходников Qt сделать разный размер иконок не получится, поэтому единственным выходом будет сделать максимально возможный размер, который предполагается и врисовывать в этот QPixmap иконки меньшего размера самому.

хм, нда. Одна из немногих вещей, за которые я "люблю" Qt - иногда приходится использовать такое черезжопное решение, что мама не горюй :D Да, со стилями я уже сталкивался - надо было убрать рамку фокуса с некоторых элементов, оказалось тоже надо наследовать и править стиль,  и в нём drawPrimitive(). Отсеивать "свои" виджеты от "несвоих" можно по какому-нибудь property. Ну что-ж, если более прямого способа нет, будет смотреть на этот...  :-\


Название: Re: qmenu с большими иконками
Отправлено: spectre71 от Июнь 24, 2009, 12:15
Размеры берутся из стилей. Создай свой стиль и переопредели метод:
int QStyle::pixelMetric ( PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0 ) const   [pure virtual]

На QStyle::PM_SmallIconSize возвращай свой размер. Максимум, что это поможет сделать - увеличить размер иконок (правда неизвестно где это еще может всплыть). Без редактирования исходников Qt сделать разный размер иконок не получится, поэтому единственным выходом будет сделать максимально возможный размер, который предполагается и врисовывать в этот QPixmap иконки меньшего размера самому.
Создавать свой стиль ради этого - точно бред.
К тому-же это не должно зависить от стиля. Размер иконок на QToolBar не зависит от стиля!
Размер по умолчанию, да, должен(или может) зависить от стиля.
А про разные размеры иконок речь уже давно не идет, действительно кто хочет поизвращаться пусть рисует их соответствующим образом.


Название: Re: qmenu с большими иконками
Отправлено: SABROG от Июнь 24, 2009, 12:28
Цитировать
Создавать свой стиль ради этого - точно бред.

Что лучше, хоть какое-то решение или никакого?


Название: Re: qmenu с большими иконками
Отправлено: Karl-Philipp от Июнь 24, 2009, 12:37
Цитировать
Создавать свой стиль ради этого - точно бред.

Что лучше, хоть какое-то решение или никакого?
Друзья, если не горит, давайте подождём ответ на feature request из Trolltech? :)


Название: Re: qmenu с большими иконками
Отправлено: Alex Custov от Июнь 24, 2009, 12:49
да бог с ними, с разными размерами для всех элементов. Через pixelMetric удалось хотя бы одного, нестандартного, размера достичь. По-быстрому набросал исходник для проверки, кому надо в аттаче.


Название: Re: qmenu с большими иконками
Отправлено: SABROG от Июнь 24, 2009, 12:55
А попробуй через эту штуку сделать - QWidgetAction

нагуглил такой код
Код:
QWidgetAction* action = new QWidgetAction;
QLabel *lbl = new QLabel ;
lbl->setPixmap("picture.png");
action->setDefaultWidget(lbl);
menu->addAction(action);

Даже картинку нашел примера:

(http://www.picamatic.com/show/2009/03/02/05/59/2535434_473x282.jpg)


Название: Re: qmenu с большими иконками
Отправлено: Alex Custov от Июнь 24, 2009, 13:06
А попробуй через эту штуку сделать - QWidgetAction

возможно подойдёт для вставки каких-то своих виджетов как на скрине, но беглый осмотр выявил что такие элементы меню не подсвечиваются мышью при наведении.


Название: Re: qmenu с большими иконками
Отправлено: SABROG от Июнь 24, 2009, 13:13
подсвечиваются мышью при наведении.

С другой стороны это и хорошо, раздолье то какое, написать свою подсветку в paintEvent'e можно. Думаю это должно быть не намного сложно, тем более если задача специфическая, то можно и свой виджет написать типа ThumbnailPreviewItem. Всё-таки это лучше, чем глобально менять стиль.


Название: Re: qmenu с большими иконками
Отправлено: Alex Custov от Июнь 24, 2009, 13:15
С другой стороны это и хорошо, раздолье то какое, написать свою подсветку в paintEvent'e можно. Думаю это должно быть не намного сложно, тем более если задача специфическая, то можно и свой виджет написать типа ThumbnailPreviewItem. Всё-таки это лучше, чем глобально менять стиль.

теоретически, можно и не глобально, есть же

Цитировать
void QWidget::setStyle ( QStyle * style )


Название: Re: qmenu с большими иконками
Отправлено: SABROG от Июнь 24, 2009, 13:37
Это да, главное, чтобы при этом у пользователя не было возможности менять стиль в программе, а то у меню будет один стиль motif какой-нибудь, а у программы другой.