1.概要
2.内容
在 Qt 中设置整个应用程序的字号,可以通过以下几种方法实现。这里提供两种最常用的方案,你可以根据项目需求选择:
方法 1:通过 QApplication 全局设置(推荐)
cpp
#include <QApplication>
#include <QFont>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建字体对象并设置字号
QFont globalFont = app.font();
globalFont.setPointSize(14); // 设置全局字号为14
// 应用全局字体
app.setFont(globalFont);
// ... 你的其他初始化代码 ...
return app.exec();
}
特点:
- 简单直接,但可能无法覆盖所有控件(如某些自定义控件或第三方库控件)
- 优先影响未显式设置字体的控件
- 无法动态调整(需重启应用生效)
方法 2:通过样式表全局设置
#include <QApplication>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 设置全局样式表
app.setStyleSheet(
"*"
"{"
" font-size: 14pt;" // 设置全局字号
"}"
);
// ... 你的其他初始化代码 ...
return app.exec();
}
特点:
- 通过 CSS 选择器
*匹配所有控件 - 可动态调整(运行时修改样式表)
- 优先级低于控件自身的
setStyleSheet - 某些复杂控件(如 QTextEdit)可能需要额外调整
动态调整字号(扩展功能)
如果需要运行时动态调整字号,可以结合信号槽机制:
// 在某个设置对话框中
void SettingsDialog::onFontSizeChanged(int value) {
QFont globalFont = qApp->font();
globalFont.setPointSize(value);
qApp->setFont(globalFont);
// 或通过样式表更新
qApp->setStyleSheet(QString("* { font-size: %1pt; }").arg(value));
}
注意事项
- 字体回退机制:如果指定字体不存在,Qt 会自动使用系统默认字体
- 控件覆盖:某些控件(如 QLineEdit)可能需要额外设置:
QLineEdit *edit = new QLineEdit; edit->setStyleSheet("QLineEdit { font-size: 14pt; }"); - 高DPI适配:建议结合
QFontMetrics使用,避免布局错乱 - 性能影响:全局样式表对复杂界面可能有轻微性能影响
完整示例(包含动态调整)
// main.cpp
#include <QApplication>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QWidget>
class App : public QWidget {
public:
App() {
QVBoxLayout *layout = new QVBoxLayout(this);
QSlider *slider = new QSlider(Qt::Horizontal);
slider->setRange(8, 24);
slider->setValue(14);
QPushButton *button = new QPushButton("Test Button");
layout->addWidget(slider);
layout->addWidget(button);
connect(slider, &QSlider::valueChanged, [=](int value){
QFont font = qApp->font();
font.setPointSize(value);
qApp->setFont(font);
// 或者使用样式表方式
// qApp->setStyleSheet(QString("* { font-size: %1pt; }").arg(value));
});
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
App window;
window.show();
return app.exec();
}
根据具体需求选择方案,推荐优先使用 QApplication::setFont() 方法,需要更精细控制时再使用样式表方案。
Qt设置整个App字号的方法
984

被折叠的 条评论
为什么被折叠?



