Qt QMainWindow.saveState()/.restoreState()错误地处理中心小部件
我正在努力处理Qt QMainWindow.saveState()/.restoreState()错误地处理中心小部件,qt,qmainwindow,qdockwidget,Qt,Qmainwindow,Qdockwidget,我正在努力处理QMainWindow和QDockWidgets,这似乎是一个混乱的区域 我需要一件非常简单的事情:当应用程序关闭时,应该保存dockwidget的排列,当应用程序打开时,应该恢复排列 问题是saveState()/restoreState()方法处理中心小部件时非常奇怪。有几种变体,每种变体都有自己的问题: 1。中央小部件设置为,例如,QPlainTextEdit或QLabel 当恢复状态时,DOCKWIDGET占用尽可能多的水平空间,在左、右DOKWIDGET中间使用薄的中心窗
QMainWindow
和QDockWidget
s,这似乎是一个混乱的区域
我需要一件非常简单的事情:当应用程序关闭时,应该保存dockwidget的排列,当应用程序打开时,应该恢复排列
问题是saveState()
/restoreState()
方法处理中心小部件时非常奇怪。有几种变体,每种变体都有自己的问题:
1。中央小部件设置为,例如,QPlainTextEdit
或QLabel
当恢复状态时,DOCKWIDGET占用尽可能多的水平空间,在左、右DOKWIDGET中间使用薄的中心窗口小部件。中心小部件的大小和位置仅保持垂直,但DockWidget和中心小部件之间的水平边界不保存
2。中央小部件设置为NULL
如果我明确要求:
this->setCentralWidget(NULL);
然后stateSave()
/statestrestore()
执行工作:状态已正确保存和还原,但由于某些奇怪的原因,用户无法在顶部或底部停靠小部件。小部件只能停靠在一个水平行中,无论我多么努力地将其停靠在顶部或底部
3。没有中央部件
“无中心部件”是指根本不接触中心部件。由于某些原因,与NULL
centralwidget相比,该行为有所不同:
状态被正确保存和恢复,但是如果我使窗口变小,然后再扩展它,那么DOKWIDGET将保持较小,中间的巨大未使用区域。所以,用户必须手动调整它们的大小
所有这些看起来都很奇怪。可能我不得不使用“无中心小部件”变体,但我很困惑,因为我不了解其行为,可能是一个bug,然后,行为可能会在未来的版本中发生变化
因此,每种方法都有自己的问题。如果有人能给我一些解决这些问题的线索,我将非常高兴。如果您的主窗口是使用Qt Designer构建的,那么即使没有其他内容,它也会添加一个中心小部件。这可以解释案例2和案例3之间的差异。与此相反,如果您只是创建一个
QMainWindow
,其中心小部件默认为空。您的Qt版本和操作系统是什么?嗯,QMainWindow
默认由Qt创建者创建(默认形式)。我在LinuxMint和Windows7上尝试了Qt5.4.1和5.5.0。行为是一样的。(顺便说一句,在5.5.0版本中,窗口大小调整的速度要比5.4.1版本慢得多,但这与此无关)如果主窗口是使用Qt Designer构建的,则即使没有其他内容,它也会始终添加一个中心小部件。这可以解释案例2和案例3之间的差异。与此相反,如果您只是创建一个QMainWindow
,其中心小部件默认为空。您的Qt版本和操作系统是什么?嗯,QMainWindow
默认由Qt创建者创建(默认形式)。我在LinuxMint和Windows7上尝试了Qt5.4.1和5.5.0。行为是一样的。(顺便说一句,在5.5.0版本中,窗口大小调整的速度明显慢于5.4.1版本,但这与此无关)