我试图通过继承它并覆盖paintEvent来自定义QPUshButton。我正在写文本,然后是下面的图标:
paintEvent(QPaintEvent *paint)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
//Draw the base
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
//Draw the text
style()->drawItemText(&p,this->rect(),Qt::AlignCenter,(this->palette()), true, this->text());
//How do I make the image immediately follow the text
if(!this->icon().isNull())
//Draw the icon at 75% button height
style()->drawItemPixmap(&p, this->rect(),Qt::AlignRight|Qt::AlignVCenter, this->icon().pixmap(this->rect().height() * 0.75));
}
我在中心对齐文本,右键对齐图标。但是,这会导致文本和图标之间出现间隙。有没有办法让我在文本后立即绘制图标,而不是对齐?
换句话说,有没有办法获得 drawItemText 完成的位置?
答案 0 :(得分:2)
QStyle::itemTextRect()会告诉您文字的位置,给定的矩形,字体指标和对齐方式。
答案 1 :(得分:0)
QFontMetrics会告诉您文字的宽度。它不知道你的矩形,所以你必须自己做对齐计算。