Название: QPushButton content (text, icon) alignment Отправлено: fear от Октябрь 11, 2008, 15:16 Текст и иконка в QPushButton по дефолту центрирован. Как можно это изменить, например прижать контент вправо или влево?
Ещё интересно каким образом можно добавить допалнительный контент в QPushButton, например ещё одну иконку. ??? Пытался получить указатель на layout, не получилось, возвращается 0 Код: class MyPushButton: public QPushButton Название: Re: QPushButton content (text, icon) alignment Отправлено: IGHOR от Октябрь 13, 2008, 22:33 Код: QPushButton *myButton = new QPushButton(this); Так подойдет ? Название: Re: QPushButton content (text, icon) alignment Отправлено: fear от Октябрь 14, 2008, 08:50 Так подойдет ? неа, это изврат :) единственное правильное решение насколько я понимаю курить QStyle Название: Re: QPushButton content (text, icon) alignment Отправлено: Alex03 от Октябрь 15, 2008, 06:09 неа, это изврат :) единственное правильное решение насколько я понимаю курить QStyle Ну почему же единственное? Можете сформировать всё что Вам надо в QPixmap, и передать его в конструктор QIcon. Можете породить свой класс от QAbstractButton. Название: Re: QPushButton content (text, icon) alignment Отправлено: fear от Октябрь 16, 2008, 13:12 Ну почему же единственное? Можете сформировать всё что Вам надо в QPixmap, и передать его в конструктор QIcon. Можете породить свой класс от QAbstractButton. В первом варианте не понятно как это может решить вопрос, иконка также будет отцентрирована по центру. Породить свой класс можно, переопределить метод paintEvent() тоже, это быстрое решение, но не правильное потому что таким образом будет разорвана связь стилей приложения с нашей кнопкой Решил задачу следующим образом: В собственном стиле переопределил метод drawControl() для CE_PushButtonLabel. Код позаимствовал из qcommonstyle.cpp, добавив возможность изменения размещения, заменив: Код: iconRect = QRect(textRect.x(), textRect.y() + (textRect.height() - labelHeight) / 2, pixmap.width(), pixmap.height()); Код: Qt::Alignment labelAlign = Qt::AlignLeft; |