QFontInfo::pixelSize()在Qt4和Qt5之间变化

QFontInfo::pixelSize()在Qt4和Qt5之间变化,qt,qt5,qt4,qfont,Qt,Qt5,Qt4,Qfont,此代码: QFont convertPointToPixelSize( const QFont& f ) { QFont ret( f ); QFontInfo fi( ret ); ret.setPixelSize( fi.pixelSize() ); return ret; } qDebug() << "getFont()=" << getFont(); qDebug() << "convertPointToPixe

此代码:

QFont convertPointToPixelSize( const QFont& f )
{
    QFont ret( f );
    QFontInfo fi( ret );
    ret.setPixelSize( fi.pixelSize() );
    return ret;
}
qDebug() << "getFont()=" << getFont();
qDebug() << "convertPointToPixelSize( getFont() )=" << convertPointToPixelSize( getFont());
在Qt 5.11.1中:

getFont()= QFont( "MS Shell Dlg 2,36,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "MS Shell Dlg 2,-1,72,5,50,0,0,0,0,0" )
getFont()= QFont( "Arial,28,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "Arial,-1,56,5,50,0,0,0,0,0" )
getFont()= QFont( "Times New Roman,72,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "Times New Roman,-1,144,5,50,0,0,0,0,0" )

请注意,为相同字体返回的QFontInfo::pixelSize值不同。所以QFontInfo::pixelSize似乎在Qt4和Qt5之间发生了变化,Qt5返回的值更大。我能做些什么来获取Qt5中Qt4的QFontInfo::pixelSize的值吗?我查看了QFontMetrics,但没有看到任何有用的内容。

QFont是一个字体请求,它并不表示实际选择的字体。QFontInfo提供了这一点。您所展示的只是Qt5和Qt4在您的系统上使用不同的DPI值,这是意料之中的。点是一个物理单位,而像素是一个逻辑单位。新闻部将两者联系起来。如果您想要相同的像素大小,为什么不在字体请求QFont中选择所需的像素大小,而不是点大小?

可能不相关,但从Qt 5.4更改时?我的Windows应用程序中的Qt5.11样式发生了变化-字体发生了变化,一些按钮看起来很糟糕。我必须手动设置QApplicationStyle,请参见此处:也许这就是您遇到的情况,简单地说,默认平台已更改。我尝试将样式从Fusions更改为Windows Vista并重新启动。但这并没有任何区别。在创建QApplication实例之前,您需要这样做。如果你使用的样式没有区别,很可能你没有真正更改。外观按钮等明显更改。我将转换为像素以用于QGraphics ScanVas,因为否则输出到PDF无法正常工作。然而,客户认为字体的大小是点,而不是像素。我认为标准的本机字体对话框不允许您选择以像素为单位的字体大小。因此,他们选择字体大小的点,我转换为像素的QGraphicsScanVas。这是一个有点混乱的决定,可能不是一个伟大的决定,但这是一个成熟的软件,我非常坚持它。你知道DPI是转换因子,所以你需要对画布应用反向相对缩放。然后画布上的物理大小将是相同的,但以像素为单位的逻辑大小将不是,也不必是。
getFont()= QFont( "MS Shell Dlg 2,36,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "MS Shell Dlg 2,-1,72,5,50,0,0,0,0,0" )
getFont()= QFont( "Arial,28,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "Arial,-1,56,5,50,0,0,0,0,0" )
getFont()= QFont( "Times New Roman,72,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "Times New Roman,-1,144,5,50,0,0,0,0,0" )