【问题标题】:Measuring text width in Qt在 Qt 中测量文本宽度
【发布时间】:2010-11-23 04:16:15
【问题描述】:

使用 Qt 框架,我如何测量以给定字体/样式呈现的一段文本的宽度(以像素为单位)?

【问题讨论】:

    标签: c++ qt text


    【解决方案1】:

    您可以使用 QFontMetrics 类 - 请参阅 width() 方法,它可以为您提供给定 QString 的宽度。

    QFont myFont(fontName, fontSize);;
    QString str("I wonder how wide this is?");
    
    QFontMetrics fm(myFont);
    int width=fm.width(str);
    

    【讨论】:

      【解决方案2】:

      在paintEvent中

      QString text("text");
      QFontMetrics fm = painter.fontMetrics();
      int width = fm.width(text);
      

      【讨论】:

        【解决方案3】:

        作为@Paul 回答的补充,我发现在绘制文本时(Linux 上的 Qt4.8),实际绘制的文本的宽度与 QFontMetrics::boundingRect 返回的宽度相比通常是关闭的。在我的情况下,这幅画通常太宽了。

        如果您希望在绘制文本时获得准确的结果(例如为围绕文本绘制的矩形标注尺寸),最好使用由QPainter 直接提供的boundingRect 函数。

        【讨论】:

        • 在使用 Qt 5.5.1 的 OS X 上发现了同样的情况。高度是关闭的。我使用的是独立的QFontMetrics,但需要在painter上设置字体并直接使用它的boundingRect来准确测量文本。
        【解决方案4】:

        从 Qt 5.11 开始,您必须使用 QFontMetrics 类的 horizontalAdvance() 方法而不是 width()width() is now obselete.

        QFont myFont(fontName, fontSize);;
        QString str("I wonder how wide this is?");
        
        QFontMetrics fm(myFont);
        int width=fm.horizontalAdvance(str);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-30
          • 2021-12-06
          • 2015-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多