Qt 为什么QFontMetrics提供的宽度与Qml矩形/文本显示的宽度不匹配

Qt 为什么QFontMetrics提供的宽度与Qml矩形/文本显示的宽度不匹配,qt,qml,qfont,qfontmetrics,Qt,Qml,Qfont,Qfontmetrics,我已经编写了一个qml和cpp文件来验证和可视化QFontMetrics概念 #include <QFontMetrics> #include<QFontMetricsF> #include<QDebug> int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiter

我已经编写了一个qml和cpp文件来验证和可视化QFontMetrics概念

#include <QFontMetrics>
#include<QFontMetricsF>
#include<QDebug>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

QString translation = " Sort médicament à la liste des filtres";
QString fontname = "Frobisher";
int size = 28;

QFont font(fontname,size);
QFontMetrics fm(font);
int pixelsWide = fm.width(translation);


qDebug()<<"width "<<pixelsWide;
return app.exec();
}
当我运行这个程序时,QFontMetrics提供的宽度是:694。 但是,qml文件中为矩形和文本设置的宽度为642,并且还设置了elide属性。有了这个逻辑(如694>642),我应该看到截断。但没有看到截断

请参考qml输出


为什么会这样?无法理解

>字体不同,因为在C++侧,你已经确定了点大小是28,但是在QML方面,你已经确定像素大小是28(知道点大小和像素大小的差异)


TL;博士

在C++方面,您使用了:

QFont::QFont(常量QString&family,int-pointSize=-1,int-weight=-1,bool-italic=false)
其中,您明确地将pointSize设置为28,但在QML中,您将pixelSize设置为28:

Text {
    // ...
    font.bold: true
    font.pixelSize: 28
    // ...
文本{
// ...
font.bold:正确
font.pixelSize:28
//…
解决方案是使用相同的字体特征:

Text {
    // ...
    font.bold: true
    font.pointSize: 28
    // ...
文本{
// ...
font.bold:正确
font.pointSize:28
//…


注意:从Qt>=5.11您应该使用而不是,因为后者已被弃用

Text {
    // ...
    font.bold: true
    font.pixelSize: 28
    // ...
Text {
    // ...
    font.bold: true
    font.pointSize: 28
    // ...