首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么QFontMetrics::maxWidth会返回这么大的值?

为什么QFontMetrics::maxWidth会返回这么大的值?
EN

Stack Overflow用户
提问于 2013-01-05 06:23:56
回答 1查看 709关注 0票数 1

Windows 7 SP1

MSVS 2010

Qt 4.8.4

我想要确定一个QLineEdit小部件的最大大小,知道它必须容纳的最大字符数。

因此,我想使用:

代码语言:javascript
复制
int QFontMetrics::maxWidth () const
Returns the width of the widest character in the font.

但这一点:

代码语言:javascript
复制
#include <QApplication>
#include <QFont>
#include <QFontMetrics>
#include <iostream>

using std::cout; using std::endl;

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);

    QFontMetrics metrics(QApplication::font()); 
    cout << "Default -     Max width: " << metrics.maxWidth() << " Width of X: " << metrics.width('X') << endl;
    const QFont f("Monospace", 8);
    QFontMetrics metrics2(f); 
    cout << "Monospace 8 - Max width: " << metrics2.maxWidth() << " Width of X: " << metrics2.width('X') << endl;
    const QFont f2("Cambria", 16);
    QFontMetrics metrics3(f2); 
    cout << "Cambria 16 -  Max width: " << metrics3.maxWidth() << " Width of X: " << metrics3.width('X') << endl;
    return 0;
}

输出如下:

代码语言:javascript
复制
Default -     Max width: 23 Width of X: 6
Monospace 8 - Max width: 23 Width of X: 6
Cambria 16 -  Max width: 91 Width of X: 12

问:为什么最大宽度比“X”的宽度大得多?字体中有没有我不知道的超大字符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-05 07:37:26

这不是Qt问题,因为底层的Windows (GetTextMetricsGetTextExtentPoint)给出了相同的值。

不要忘记,字体可能包含许多不常见字符的字形:连字、各种长破折号、符号、小工具和您不需要的字母表中的字符。

我对“等宽”字体会发生这种情况感到有点惊讶,但很明显,这些字体只是为该字体设计的字符子集固定的间距。例如,Courier New有几十个字符,这些字符的宽度是平均字符宽度的两倍多,比如U+0713叙利亚字母GAMAL:ܓ。

如果大多数时间是正确的就足够了,我会取平均字符宽度,将其向上舍入一点,然后将其相乘。如果用户需要输入几个非常宽的字符,您可能需要稍微滚动一下,但这并不是世界末日。

如果你知道它将永远是英语,你也可以测量一个大写的W并使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14165988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档