Qt 缩放应用分辨率

3

我创建了一个Qt应用程序,保证始终在4:3的显示器上运行。我把分辨率硬编码为320x240,并设计了所有东西看起来很棒。

现在需求已经改变,该应用程序将在640x480的分辨率下运行(仍然是4:3)。

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

我找到了很多关于高DPI设置的答案,但这与高DPI几乎没有关系。

1个回答

2
你可以使用 QGraphicsView 并将主窗口小部件嵌入其中。但是整个应用程序必须对所有小部件应用相同的缩放因子。 QGraphicsView 允许你进行缩放操作。
例如:
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_())

那是最快的处理方式。最好的方式是重构你的整个代码,使其与分辨率无关(例如使用配置类)。"原始答案"

这很完美。唯一的问题是当我关闭窗口或调用QApplication.quit()时,会出现“分段错误:11”的错误。有什么想法吗? - Andrei Cioara
在Qt中,当您删除一个QObject时,它也会删除其子对象。这个错误通常是由于一个对象被删除两次或在堆中实例化时被删除而引起的。 - Dimitry Ernot
但我没有删除任何东西。这都是Python的GC。 - Andrei Cioara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接