构造 QPushButton,QIcon alignleft 和 text center align

Construct QPushButton with QIcon alignleft and text center align

我想创建 QPushButton QIcon 左对齐(默认情况下不居中)和文本居中对齐。我不想使用样式 sheet。我知道可能会使用 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);
}

产生此错误消息

no matching function for call to 'QStylePainter::drawItemPixmap(QRect&, Qt::AlignmentFlag, QIcon&)' painter.drawItemPixmap(opt.rect, Qt::AlignCenter, opt.icon);

上面的代码有什么问题?

你得到

this error code error: no matching function for call to '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)));