2017-08-25 61 views
1

当我使用any method选择非默认(或基地)样式Qt的快速控制2应用(即通用之一材料),那么所有的文本(其字体大小必须依靠QGuiApplication::font)控制像LabelTextField,使用字体大小值,QCoreApplication有改变之前:字体大小控件2

QFont font = application.font(); 
bool ok = false; 
font.setPointSize(QSettings{}.value("fontSize", 17).toInt(&ok)); 
Q_ASSERT(std::exchange(ok, false)); 
application.setFont(font); 

只有TextTextField适当调整,但他们在我的GUI没有用的。

当我坚持默认样式,然后所有提到的项目都适当调整大小。

如何使所有项目的大小取决于全球font.pointSize何时使用样式,其他默认

相互连接的问题是如何获得适当的(意思是“对比度”和风格符合的),比如说颜色,突出显示的文本和背景为当前主题风格中使用?从儿童ApplicationWindow使用SystemPalette { id: palette }给出了只适合默认风格的颜色(比如palette.highlightedText"white"palette.highlight"blue""darkblue"(不知道))。它看起来丑陋的风格主题,从默认不同。

另一个重要的观察是:如果我将font.pointSize: 17(或同等font: Qt.application.font)根ApplicationWindow,那么所有的项目都适当调整,除了那些他们具有新的上下文的:说,highlight:delegate: s转换*View S,sourceComponent: s转换Loader S,ComponentRepeater和其他的默认属性项,其中因迷路父Item的上下文的字体休息的继承。

看来,我应该为每一个新的上下文手动“继承” ApplicationWindow.window.font。如果是这样,那很伤心。这很无聊,例如,如果在Repeater我用RowLayout有大量的Label S:在每个Label我要补充font: ApplicationWindow.window.font

+0

BTW尝试不同风格的主题,给人一​​种找到所有的不好的设计决策的机会。它就像一个用于GUI的筛选器,它用'font.pointSize'的合理范围枚举所有可能的样式。 – Orient

回答

0

东方,我知道这是为时已晚,但人们也可以设置字体大小QApplication这样的:

QFont font = QApplication::font(); 
font.setPointSizeF(fontSize); 
QApplication::setFont(font); 
+0

这是无稽之谈。 * QML *应用程序不需要'QApplication',只需'QGuiApplication'。有[甚至是警告](http://doc.qt.io/qt-5/qapplication.html#setFont)不能像你所说的那样做。 – Orient