如何在Qt中获取drawItemText的结束位置

时间:2012-09-12 15:22:59

标签: qt qpainter

我试图通过继承它并覆盖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 完成的位置?

2 个答案:

答案 0 :(得分:2)

QStyle::itemTextRect()会告诉您文字的位置,给定的矩形,字体指标和对齐方式。

答案 1 :(得分:0)

QFontMetrics会告诉您文字的宽度。它不知道你的矩形,所以你必须自己做对齐计算。