我有一台4k显示器,我已经安装了Qt 5.6 RC + VS 2015 + Qt5Package。一切都已设置好,我可以设计和编译我之前在普通DPI PC上开发的应用程序,它运行得很好。
但是...
当我第一次在highdpi屏幕上打开我项目的layout.ui
文件时,我看到主窗口大小为1000 x 500像素。 Qt Designer中的窗口以highdpi显示,它的清晰度与编译应用程序时的内容相对应。但是当您在Qt Designer或任何元素中更改窗口大小时,它会在屏幕上使用绝对像素。因此,QtDesigner中屏幕宽度的一半宽度转换为2000px宽的窗口。这在highdpi机器上编译并运行正常,但是当应用程序在标准尺寸屏幕上执行时,它是巨大的。
这会影响绝对大小的所有元素。
问题是,在低DPI上设计并在高dpi上运行时,每个在线线程都解决了问题。这可以通过QT_DEVICE_PIXEL_RATIO
来完成。但它不会反向工作,无论你在高DPI上设置的绝对大小在标准DPI屏幕上看起来都很大。
Qt Designer中有任何与设备无关的像素吗?
您建议采用什么方法来解决这个问题?假设我在96dpi屏幕填充上需要20px,但这在240dpi屏幕上变为大约50像素。我是否必须从C ++代码设置每个这样的维度?
我现在在main函数中使用这个技巧:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyApp w;
// I designed this on 240DPI screen 3840x2160px
qreal refDpi = 240.;
qreal refWidth = 3840.;
qreal refHeight = 2160.;
// gets screen resolution
QRect rect = a.primaryScreen()->geometry();
qreal width = qMax(rect.width(), rect.height());
qreal height = qMin(rect.width(), rect.height());
// gets DPI
qreal dpi = a.primaryScreen()->logicalDotsPerInch();
// get ratio of my 240 DPI and current DPI
qreal m_ratio = qMin(height / refHeight, width / refWidth);
qreal m_ratioFont = qMin(height*refDpi / (dpi*refHeight), width*refDpi / (dpi*refWidth));
// resize accordingly
w.resize(w.width() * m_ratio, w.height() * m_ratio);
// this is just a little tweak not to allow the window to grow over window size. likely unnecessary
w.setMaximumSize(width, height);
w.show();
return a.exec();
}
但我不能为每个维度做这个,因为有大量的UI元素,有些有宽度,有些有填充等。分离UI和程序的整个想法逻辑会徒劳无功。
由于