如何获取样式表设置的Qt中小部件的字体
How to get font of widget in Qt set by stylesheet?
我有一个Qt应用程序,它应用了自定义样式表(通常用于所有小部件),该样式表中包含自定义字体。但当尝试获取某些小部件的字体时,font()
方法返回不同的字体。我想得到QWidget
的字体,它是由样式表设置的。font()
方法总是返回全局系统字体或setFont()
设置的字体,但不返回setStyleSheet()
设置的用于在小部件中绘制的字体。我需要字体来根据字体大小进行一些计算。我使用Qt 4.6。如何获取样式表设置的小部件(应用程序运行时显示)的真实字体?
经过一些调查,我发现如果我将定义的样式表应用于某个小部件,我可以使用myWidget->font()
方法获得正确的字体信息(由样式表定义)。此外,当我将样式表设置为整个MainWindow
时,我可以使用font()
方法为MainWindow
包含的所有小部件获取正确的字体信息。但是,当我将样式表设置为QApplication
的实例时,所有小部件的font()
方法都返回默认字体或之前由setFont()
设置的字体。为什么会这样?
您可以检索特定小部件的字体,读取其属性,如下所示:
//Get pushbutton font.
QFont font = ui->pushButton->property("font").value<QFont>();
qDebug() << font.family() << font.pointSize();
//Get MainWindow font.
QFont font2 = property("font").value<QFont>();
qDebug() << font2.family() << font2.pointSize();
要从Qt样式表加载值,您应该调用以下方法:
widget->style()->unpolish(widget);
widget->style()->polish(widget);
widget->update();
之后,小部件的所有值都将根据指定的样式表值进行更新。
我能从QStyleSheetStyle::updateStyleSheetFont中看出的最好的一点是,小部件总是包含样式表中解析的字体。我希望QWidget::font()
返回您使用样式表设置的解析字体,即合并的应用程序字体、任何父窗口小部件字体和样式表字体。
当然,必须首先对小部件进行抛光,除非您在事件交付后(即从事件循环中)进行查询。
// https://github.com/KubaO/stackoverflown/tree/master/questions/style-font-query-test-45422885
#include <QtWidgets>
int main(int argc, char ** argv) {
QApplication app{argc, argv};
QLabel label("Test");
auto font1 = label.font();
label.setStyleSheet("font-size: 49pt;");
label.show();
label.ensurePolished();
auto font2 = label.font();
Q_ASSERT(font1.pointSize() != 49);
Q_ASSERT(font2.pointSize() == 49);
Q_ASSERT(font1.family() == font2.family());
}
相关文章:
- 由于PC显示设置的更改,Qt小部件被部分剪裁
- 有没有办法区分Qt小部件是通过鼠标单击还是通过按表键获得焦点?
- 在Qt小部件应用程序中,在重载的"paintEvent"中的"setValue"
- Qt小部件中的摄像头访问
- 精灵动画查看器应该使用哪些Qt小部件
- Qt小部件将子布局堆叠在彼此之上
- 将STL文件添加到QT小部件
- Qt小部件应用程序"Library not registered"错误
- 为什么我的Qt小部件的焦点被改变了?
- 如何将开关QML添加到QT小部件
- 从另一个线程更新QT小部件的一种详细方法
- QT小部件应用程序输出到控制台
- 在屏幕上的确切位置保存和恢复Qt小部件
- 在Qt小部件应用程序中显示cmd终端
- QSqlError("',"',"',) 在 QT 小部件应用程序中
- 处理自定义QT小部件中的输入事件
- 未找到"png.h"文件,当包含在Qt小部件项目中时
- 从 Qt 小部件应用程序调用 pyqt widget
- 当您通过Qt小部件打开文件时,是否可以'pop-up'文件?
- 如何在Qt小部件应用程序中翻译外部文件中的字符串?