Windows 如果缺少QDockwidget,QSettings restore会导致应用程序在显示时冻结()

Windows 如果缺少QDockwidget,QSettings restore会导致应用程序在显示时冻结(),windows,qt,qdockwidget,qsettings,Windows,Qt,Qdockwidget,Qsettings,我有一个加载.dll的Qt应用程序,它将把QDockwidget小部件添加到QMainWindow。为了保持尺寸和几何图形,我将它们保存在QMainWindow QSettings settings; settings.setValue("MainWindow/geometry", saveGeometry()); settings.setValue("MainWindow/windowState", saveState()); 启动时,我读回设置 QSetti

我有一个加载.dll的Qt应用程序,它将把
QDockwidget
小部件添加到
QMainWindow
。为了保持尺寸和几何图形,我将它们保存在
QMainWindow

    QSettings settings;
    settings.setValue("MainWindow/geometry", saveGeometry());
    settings.setValue("MainWindow/windowState", saveState());
启动时,我读回设置

    QSettings settings;
    restoreState(settings.value("MainWindow/windowState").toByteArray());
    restoreGeometry(settings.value("MainWindow/geometry").toByteArray());
就在调用
show()
之前

当我运行应用程序时,关闭它,然后删除其中一个DLL(有效地删除以前在启动时加载的
QDockwidget
),应用程序将在
show()
调用
QMainWindow
时冻结。我可以通过删除注册表文件夹(我在Windows中)
HKEY\u CURRENT\u USER\Software\MyCompany\MyApplication\MainWindow
使应用程序正常启动,但我丢失了存储在其中的所有其他信息

我想要的是让UI看起来像是丢失的
QDockWidget
被隐藏,永远无法恢复,而不是破坏所有几何体和状态信息的胡说八道

有人见过这个问题吗?甚至解决了!?!如果有任何提示、提示或解决方法,我将不胜感激


干杯

如果您知道要删除哪个dock小部件,可以在保存主窗口的状态之前将其关闭,这样该状态就不会包含已删除dock小部件的设置。为什么不使用QLibrary检查DLL的可用性,如果相应的LIB不可用,您没有分别从QSettings读取内容?问题是它是一个开放接口,我们不知道将加载什么。所以我们不知道DLL或小部件的名称