首页 > 解决方案 > Qt Scale 应用程序分辨率

问题描述

我创建了一个保证始终在 4:3 监视器上运行的 Qt 应用程序。我将 320x240 硬编码为分辨率,并将一切设计得看起来很棒。

现在要求发生了变化,应用程序将以 640x480 分辨率(仍为 4:3)运行。

有没有一种简单的方法来扩展整个应用程序,使所有东西的大小都翻倍。特别是我想避免手动更改所有按钮大小、字体、叠加层的绝对定位等。

我找到了很多关于高 DPI 设置的答案,但这与高 DPI 关系不大。

标签: qtpyqt

解决方案


您可以使用 aQGraphicsView并将您的主要小部件嵌入其中。但是您的整个应用程序必须对所有小部件应用相同的因素。

AQGraphicsView允许您放大。

例如:

class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setFixedSize(320, 420)

        layout = QFormLayout(self)
        btn = QPushButton("Button")
        btn.setFixedSize(100, 40)
        lineEdit = QLineEdit("Button")
        btn.setFixedSize(150, 20)
        layout.addRow("A button", btn)
        layout.addRow("A Line Edit", lineEdit)



if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)

    w = Widget()
    view = QGraphicsView()
    scene = QGraphicsScene(0, 0, 1000, 1000)
    view.setFixedSize(320 * 2, 420 * 2)
    view.setScene(scene)
    view.scale(2, 2)
    proxy = scene.addWidget(w)
    view.centerOn(proxy)
    #w = Widget()
    #w.show()
    view.show()
    sys.exit(app.exec_())

这是最快的进行方式。最好的方法是将整个代码重构为独立于分辨率(例如,通过使用配置类)。


推荐阅读