我想创建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);
上面的代码出了什么问题?
答案 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)));