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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPushButton content (text, icon) alignment  (Прочитано 9181 раз)
fear
Гость
« : Октябрь 11, 2008, 15:16 »

Текст и иконка в QPushButton по дефолту центрирован. Как можно это изменить, например прижать контент вправо или влево?
Ещё интересно каким образом можно добавить допалнительный контент в QPushButton, например ещё одну иконку. Непонимающий

Пытался получить указатель на layout, не получилось, возвращается 0
Код:
class MyPushButton: public QPushButton
{
  public:
    MyPushButton(const QIcon &icon, const QString &text, QWidget *parent = 0)
    :QPushButton(icon, text, parent)
    {
      QLayout *l = layout();
      qDebug("%d\n", l);  // 0
    }
};
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #1 : Октябрь 13, 2008, 22:33 »

Код:
QPushButton *myButton = new QPushButton(this);
myButton->setGeometry(10,10,400,100);
QLabel *myIcon = new QLabel(myButton);
myIcon->setAttribute(Qt::WA_TransparentForMouseEvents);
myIcon->setGeometry(0,0,100,100);
myIcon->setPixmap(QPixmap("C:/pix.png"));
QLabel *myText = new QLabel(myButton);
myText->setGeometry(100,0,300,100);
myText->setAttribute(Qt::WA_TransparentForMouseEvents);
myText->setText("SomeText");

Так подойдет ?
« Последнее редактирование: Октябрь 13, 2008, 22:36 от IGHOR » Записан
fear
Гость
« Ответ #2 : Октябрь 14, 2008, 08:50 »

Так подойдет ?

неа, это изврат Улыбающийся единственное правильное решение насколько я понимаю курить QStyle
Записан
Alex03
Гость
« Ответ #3 : Октябрь 15, 2008, 06:09 »

неа, это изврат Улыбающийся единственное правильное решение насколько я понимаю курить QStyle

Ну почему же единственное?
Можете сформировать всё что Вам надо в QPixmap, и передать его в конструктор QIcon.
Можете породить свой класс от QAbstractButton.
Записан
fear
Гость
« Ответ #4 : Октябрь 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;
if(labelAlign == Qt::AlignLeft)
  iconRect = QRect(textRect.x(), textRect.y() + (textRect.height() - labelHeight) / 2, pixmap.width(), pixmap.height());
else if(labelAlign == Qt::AlignRight)
  iconRect = QRect(textRect.x() + (textRect.width() - labelWidth), textRect.y() + (textRect.height() - labelHeight) / 2, pixmap.width(), pixmap.height());
else //// Qt::AlignHCenter
  iconRect = QRect(textRect.x() + (textRect.width() - labelWidth) / 2, textRect.y() + (textRect.height() - labelHeight) / 2, pixmap.width(), pixmap.height());
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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