如何在高DPI显示器上使用QTDesigner?

时间:2016-02-27 01:38:56

标签: c++ qt highdpi

我有一台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屏幕上看起来都很大。

  1. Qt Designer中有任何与设备无关的像素吗?

  2. 您建议采用什么方法来解决这个问题?假设我在96dpi屏幕填充上需要20px,但这在240dpi屏幕上变为大约50像素。我是否必须从C ++代码设置每个这样的维度?

  3. 我现在在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和程序的整个想法逻辑会徒劳无功。

    由于

0 个答案:

没有答案