构造 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)));
我想创建 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)));