代码之家  ›  专栏  ›  技术社区  ›  Andy Brice

QFontInfo::Qt 4和Qt 5之间的pixelSize()更改

  •  -1
  • Andy Brice  · 技术社区  · 6 年前

    此代码:

    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());
    

    getFont()= QFont( "MS Shell Dlg 2,36,-1,5,50,0,0,0,0,0" ) 
    convertPointToPixelSize( getFont() )= QFont( "MS Shell Dlg 2,-1,48,5,50,0,0,0,0,0" ) 
    getFont()= QFont( "Arial,28,-1,5,50,0,0,0,0,0" ) 
    convertPointToPixelSize( getFont() )= QFont( "Arial,-1,37,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,96,5,50,0,0,0,0,0" )
    

    在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()似乎在Qt 4和Qt 5之间发生了变化(为qt5返回更大的值)。我可以做些什么来获取Qt 5中Qt 4的QFontInfo::pixelSize()值吗?我看了QFontMetrics,但没有看到任何有用的东西。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kuba hasn't forgotten Monica    6 年前

    QFont 是字体请求,它不指示所选的实际字体。 QFontInfo 提供这个。您所展示的只是Qt 5和Qt 4在您的系统上使用不同的DPI值,这是意料之中的。点是物理单位,而像素是逻辑单位。DPI将两者联系起来。如果您想要相同的像素大小,为什么不在字体请求中选择所需的像素大小( QFont公司 ),而不是点大小?