使用QIcon alignleft和文本中心对齐构造QPushButton

-7 c++ qt qpainter qpushbutton

我想创建QPushButtonQIcon左对齐(不向中心为默认)和文本居中对齐.我不想使用样式表.我知道可能会使用,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);
}
Run Code Online (Sandbox Code Playgroud)

这会产生此错误消息

没有匹配函数来调用'QStylePainter :: drawItemPixmap(QRect&,Qt :: AlignmentFlag,QIcon&)'painter.drawItemPixmap(opt.rect,Qt :: AlignCenter,opt.icon);

上面的代码有什么问题?

Nic*_*aus 6

你得到了

此错误代码错误:没有用于调用'QStylePainter :: drawItemPixmap(QRect&,Qt :: AlignmentFlag,QIcon&)'painter.drawItemPixmap(opt.rect,Qt :: AlignCenter,opt.icon)的匹配函数;

因为drawItemPixmap画了一个像素图.不是一个图标.所以你需要做的就是使用pixmap()访问器获取图标pixmap .

更改

painter.drawItemPixmap(opt.rect, Qt::AlignLeft, opt.icon);
Run Code Online (Sandbox Code Playgroud)

// or whaever size you want
painter.drawItemPixmap(opt.rect, Qt::AlignLeft, opt.icon.pixmap(QSize(16,16))); 
Run Code Online (Sandbox Code Playgroud)