3

文档QFont.toString说它返回“以逗号分隔的属性列表”,但它没有指定“属性”是什么或它们进入的顺序。 (编辑:文档已更新,因此它现在明确列出属性及其顺序。) 我发现了一个老问题,其答案说属性是:

字体系列, pointSizeF , pixelSize,,,,,下划线,strikeOut QFont::StyleHint,fixedPitch,rawModeQFont::WeightQFont::Style

但是我找不到任何有关此信息的权威来源(而且该答案已有 10 多年的历史,并且与 Qt4 有关)。

是否有任何关于 格式的明确文档QFont.toString(),包括它代表的属性以及它们的顺序?假设保存这样的字符串并稍后QFont.fromString()在不同版本的 Qt 上使用它是否可行?

4

2 回答 2

4

没有说明哪些属性以及它们被序列化的顺序的文档。通常,Qt 不会指示 Qt 类的序列化顺序,因为它们可能会有所不同,但我认为在 QFont 的情况下,它应该建立一个明确的顺序,因此我建议将其报告为错误。因此,了解顺序的唯一方法是查看源代码

// https://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/text/qfont.cpp?h=5.15#n2070
QString QFont::toString() const
{
    const QChar comma(QLatin1Char(','));
    QString fontDescription = family() + comma +
        QString::number(     pointSizeF()) + comma +
        QString::number(      pixelSize()) + comma +
        QString::number((int) styleHint()) + comma +
        QString::number(         weight()) + comma +
        QString::number((int)     style()) + comma +
        QString::number((int) underline()) + comma +
        QString::number((int) strikeOut()) + comma +
        QString::number((int)fixedPitch()) + comma +
        QString::number((int)   false);

    QString fontStyle = styleName();
    if (!fontStyle.isEmpty())
        fontDescription += comma + fontStyle;

    return fontDescription;
}

我认为,如果格式发生变化,那么 Qt 将实现逻辑,以便以与 QDataStream 类似的方式支持所有格式,因此通常您不必担心。

于 2020-09-22T03:49:06.907 回答
0

晚了但是......在Qt6 QFont doc toString()方法中描述了字符串内容: [https://doc.qt.io/qtforpython/PySide6/QtGui/QFont.html?highlight=qfont#PySide6.QtGui。 PySide6.QtGui.QFont.toString ]

但是,似乎在从 QFontDialog(Python 3.9.4、Qt 6.2.2 通过 PySide6、OSX Big Sur)返回 QFont 时,在最后一个参数之前提供了 2 个附加参数(“字体样式(不可用时省略)”)

此外,只有 1 个 PointSize 值,并且 PointSizeF 似乎不再可用。

不幸的是,我没有在网上找到最新的资源......

于 2022-01-05T16:08:29.300 回答