做好的QT软件,换一个笔记本打开后发现字体很小,部分字体还被控件遮挡
出现这种情况的原因主要是屏幕的DPI(每英寸点数)不同。Qt中控件的大小单位为像素,在高DPI下,控件会变小,低DPI下控件会变大。而Qt中字体的单位默认为磅,无论在什么显示器上显示同一磅值的字体,其大小理论上不会发生变化。这就导致在高DPI屏幕上,可能因控件变小而造成字体显示不全或字体相对控件显得过大被遮挡的情况。
以下是一些改善的方法:
- 设置全局字体:可以在
main
函数中设置全局字体,将字体的单位由磅转换为像素。示例代码如下:
#include <QApplication>
#include <QFont>int main(int argc, char *argv[]) {QApplication a(argc, argv);// 设置全局字体QFont font("宋体");int pointSize = font.pointSize();font.setPixelSize(pointSize * 90 / 72); // 进行磅到像素的转换a.setFont(font);// 其余应用程序代码return a.exec();
}
- 使用样式表:在Qt Creator中加入样式表,为需要调整字体的控件设置字体大小为像素值。例如,若要设置
QLabel
的字体大小为12像素,可以在样式表中添加QLabel { font - size: 12px; }
。这样可以确保在不同DPI的屏幕上,字体大小能随控件大小自适应变化。 - 设置EnableHighDpiScaling属性(推荐):如果使用的Qt版本在5.6.0之后,可以在创建
QApplication
对象之前设置QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
,启用高DPI缩放功能,让Qt自动处理不同DPI屏幕下的界面缩放问题。示例代码如下:
#include <QApplication>
#include <QCoreApplication>int main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QApplication a(argc, argv);// 其余应用程序代码return a.exec();
}