2024-09-29 02:22:14 发布
网友
我有一个QDialog,当用户关闭QDialog并稍后重新打开它时,我想记住它的位置并在完全相同的位置打开窗口。我怎么能准确地记得那个位置?在
您可以重新实现对话框的CloseEvent(在Qt文档中找到here),并使用QSettings(docshere)保存适当的设置。在
class MyDialog(QDialog): def closeEvent(event): settings = QSettings() settings.setValue('value1', 1) event.accept()
罗南·佩克斯昂的回答几乎是正确的。 尝试此操作时出现错误:
AttributeError: 'NoneType' object has no attribute 'toByteArray'
这是因为,首先,没有保存的几何体和状态。另外,返回值已经是一个QByteArray。这个代码适用于我:
为此,您可以使用^{}、^{}resize()和{}方法,以及其他答案中提到的closeEvent()和{a4}。下面是一些例子,让我们了解一下:
resize()
class MyWindow(QMainWindow): def __init__(self, parent): QMainWindow.__init__(self, parent) self.settings = QSettings("MyCompany", "MyApp") self.restoreGeometry(self.settings.value("geometry", "")) self.restoreState(self.settings.value("windowState", "")) def closeEvent(self, event): self.settings.setValue("geometry", self.saveGeometry()) self.settings.setValue("windowState", self.saveState()) QMainWindow.closeEvent(self, event)
编辑:
更新了使用PyQt API v2的答案。如果使用API v1,则必须手动将settings.value()的结果转换为类似于ByteArray的
settings.value()
我还使用了窗口自己的size()和pos(),因为我已经从.ui文件加载窗口。如果从头开始对窗口进行编码,可以在这些行之前将其设置为默认值。对于状态,我默认为一个空字符串,该函数很乐意将其作为空ByteArray接受,并且在第一次运行时不执行任何操作。在
size()
pos()
.ui
您可以重新实现对话框的CloseEvent(在Qt文档中找到here),并使用QSettings(docshere)保存适当的设置。在
罗南·佩克斯昂的回答几乎是正确的。 尝试此操作时出现错误:
这是因为,首先,没有保存的几何体和状态。另外,返回值已经是一个QByteArray。这个代码适用于我:
^{pr2}$为此,您可以使用^{} 、}方法,以及其他答案中提到的closeEvent()和{a4}。下面是一些例子,让我们了解一下:
^{} resize()
和{编辑:
更新了使用PyQt API v2的答案。如果使用API v1,则必须手动将
^{pr2}$settings.value()
的结果转换为类似于ByteArray的我还使用了窗口自己的
size()
和pos()
,因为我已经从.ui
文件加载窗口。如果从头开始对窗口进行编码,可以在这些行之前将其设置为默认值。对于状态,我默认为一个空字符串,该函数很乐意将其作为空ByteArray接受,并且在第一次运行时不执行任何操作。在相关问题 更多 >
编程相关推荐