[PyQt] QMainWindow.restoreState does not restore docked widget
thomir at gmail.com
Fri Apr 4 02:05:42 BST 2014
I'm having difficulties making my main window restore my dock widget
correctly. I've produced a minimal complete example to demonstrate my
problem. The minimal example is still 73 lines long, which is perhaps a
little long to include in an email in full. I'll post a link to it, and
then quote snippets thereafter.
The example is at: http://paste.ubuntu.com/7201238/
The docs for QMainWindow>>restoreState say:
Restores the *state* of this mainwindow's toolbars and dockwidgets. The
*version* number is compared with that stored in *state*. If they do not
match, the mainwindow's state is left unchanged, and this function returns
false; otherwise, the state is restored, and this function returns true.
The first time I run the minimal example, the dock widget isn't shown, but
I guess that's to be expected - QSettings won't have returned any data,
since the config file doesn't exist yet.
However, if I show the dock widget (by clicking on the toolbar button) and
then close the window, the next time I run the minimal example I expect the
dock widget to be shown, but it's not.
I have double checked the following:
1) My dock widget is created *before* restoreState() is called.
2) I've called 'setObjectName' on my dock widget, and it's given a unique
3) Qsettings is creating a data file (under Linux it's
~/.config/TestCompany/TestApp.conf), and it contains data.
The example is simple enough that I feel like I must be missing something
In my experimentation, I've found that if I add a call to
'restoreDockWidget' in my minimal example like this:
settings = QtCore.QSettings()
# make the toggle button in the same state as the dock widget.
Then the dock widget is restored from the QSettings data, but the first
time the app is run, the dock widget is shown, even though there's no
Qsettings data. I expected 'restoreDockWidget' to return False in this case
(and not show the dock widget), but it seems to return True every time,
which means I cannot detect that case and handle it like so:
if not self.restoreDockWidget(self.filter_widget):
Sorry for the long email, but I'm hoping someone can point me in the
correct direction here. What's the recommended way of restoring a dock
widget from QSettings data, and also for providing a sensible default
position the first time the application is run?
I'm using version 4.10.4+dfsg-1 as packaged in Ubuntu Trusty Tahr.
Thanks in advance for your time.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the PyQt