的Windows 7 SP1
MSVS 2010
的Qt 4.8.4爲什麼QFontMetrics :: maxWidth返回這麼大的值?
我想確定QLineEdit的窗口小部件的知道必須適應它的最大字符數的最大尺寸。
所以,我想用:
int QFontMetrics::maxWidth() const
Returns the width of the widest character in the font.
但這:
#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;
}
輸出這樣的:
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'的寬度?我不知道字體中是否有超大字符?
這正是我關心的問題 - 我正在寫一個必須有國際支持的應用程序。取決於字體是否支持「W」太過英語/以ASCII爲中心。所以,我會繼續思考;可能編寫我自己的MaxWidth並確定導致此問題的字符是什麼。有趣的是:這個[link](https://bugreports.qt-project.org/browse/QTBUG-13399)報告沒有相同的問題。它輸出'QFontMetrics :: maxWidth'的期望值。但是他正在使用Debian 6,或許我需要深入研究GetTextMetrics,正如你所建議的那樣。謝謝。 –
我也期待着找到哪個坎布里亞字形是'W'大小的8倍。 –
如果您試圖對所有語言和字體100%正確,那麼將最大字符寬度乘以最大字符數就太簡單了。角色可以以驚人的方式結合到字形集羣中。我能想到的大部分可能會比組成它們的個人角色更窄,但如果某些角色比組成角色更廣泛,我不會感到驚訝。誰知道什麼樣的字距提示可能也會起作用。 –