Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QMainWindow.saveState()/.restoreState()错误地处理中心小部件_Qt_Qmainwindow_Qdockwidget - Fatal编程技术网

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版本,但这与此无关)