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

时间:2016-04-28 15:04:53

标签: c++ qt qpainter 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 个答案:

答案 0 :(得分: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);

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