Создайте 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))); 
Другие вопросы по тегам