Создайте QPushButton с выравниванием по левому краю и выравниванием по центру текста
Я хотел бы создать QPushButton
с QIcon
выравнивание по левому краю (не по центру по умолчанию) и выравнивание по центру текста. Я не хочу использовать таблицу стилей. Я знаю, что возможно использую QPainter
но я не смог этого сделать. Я имел небольшую подсказку и попробовал этот код:
void MyPushButton::paintEvent(QPaintEvent *)
{
QStylePainter painter(this);
QStyleOptionButton opt;
initStyleOption(&opt);
painter.drawItemPixmap(opt.rect, Qt::AlignLeft, opt.icon);
painter.drawItemText(opt.rect, Qt::AlignCenter, palette(), 1, opt.text);
painter.drawPrimitive(QStyle::PE_PanelButtonCommand, opt);
}
который выдает это сообщение об ошибке
нет соответствующей функции для вызова 'QStylePainter::drawItemPixmap(QRect&, Qt::AlignmentFlag, QIcon&)' painter.drawItemPixmap(opt.rect, Qt::AlignCenter, opt.icon);
Что не так с кодом выше?
1 ответ
Вы получаете
эта ошибка кода ошибки: нет соответствующей функции для вызова 'QStylePainter::drawItemPixmap(QRect&, Qt::AlignmentFlag, QIcon&)' painter.drawItemPixmap(opt.rect, Qt::AlignCenter, opt.icon);
так как drawItemPixmap
рисует... растровое изображение. Не значок. Так что все, что вам нужно сделать, это получить растровое изображение значков, используя pixmap()
сбруя.
менять
painter.drawItemPixmap(opt.rect, Qt::AlignLeft, opt.icon);
в
// or whaever size you want
painter.drawItemPixmap(opt.rect, Qt::AlignLeft, opt.icon.pixmap(QSize(16,16)));