PDA

View Full Version : QMainWindow::restoreState



EnErGy[CSDX]
4th September 2008, 17:41
#include <QtCore>
#include <QtGui>

class Window: public QMainWindow
{
public:
Window(void):QMainWindow()
{
t=new QToolBar("Toolbar1",this);
t->addAction(new QAction("Act1",this));
t->addAction(new QAction("Act2",this));
t->addAction(new QAction("Act3",this));
addToolBar(t);

QSettings s("Trolltech","TestAPP");
if(restoreState(s.value("MainWindowState").toByteArray()))
{
// creation of second toolbar depends on user interaction
// for example second run
t=new QToolBar("Toolbar2",this);
t->addAction(new QAction("Act1",this));
t->addAction(new QAction("Act2",this));
t->addAction(new QAction("Act3",this));
addToolBar(t);
}

}
~Window(void)
{
QSettings s("Trolltech","TestAPP");
s.setValue("MainWindowState",saveState());
}
private:
QToolBar* t;
};


int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Window window;
window.show();
return app.exec();
}

why toolbars layout differently when state restored and when i dont use state restore function?

jacek
4th September 2008, 22:10
Maybe because you save the state in destructor? It might be too late. What does s.value("MainWindowState").isValid() return?

EnErGy[CSDX]
5th September 2008, 17:10
it isn`t too late.
issue is that if toolbar created after state restore toolbar placed at end of line with minimum size.

Do you run example?

jacek
15th September 2008, 01:49
This seems to work:
Window(void):QMainWindow()
{
t=new QToolBar("Toolbar1",this);
t->setObjectName( "aaa" );
t->addAction(new QAction("Act1",this));
t->addAction(new QAction("Act2",this));
t->addAction(new QAction("Act3",this));
addToolBar(t);

t=new QToolBar("Toolbar2",this);
t->setObjectName( "bbb" );
t->addAction(new QAction("Act1",this));
t->addAction(new QAction("Act2",this));
t->addAction(new QAction("Act3",this));
addToolBar(t);

QSettings s("Trolltech","TestAPP");
restoreState(s.value("MainWindowState").toByteArray());
}
(note the calls to setObjectName())