crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как сохранить размеры формы на выходе из проги
Lonely_hermit
  опции профиля:
сообщение 13.4.2010, 22:02
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 10
Регистрация: 3.4.2010
Пользователь №: 1590

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте.
Как мне сохранить размеры формы на выходе из программы, если у меня на ней три фрейма с TableView и два сплиттера между ними.
Премного благодарен.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 13.4.2010, 22:10
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Я использую так (для QMainWidow - если просто виджет, выкинь saveState etc):

Раскрывающийся текст
// cUConvMainWindow class constructor
//--------------------------------------------------------------------------------------
cUConvMainWindow::cUConvMainWindow(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ....

    loadWindowState();

        ....
}

//--------------------------------------------------------------------------------------
void cUConvMainWindow::closeEvent(QCloseEvent * event)   // closeEvent catcher - control of unsaved data
{
    saveWindowState();

    event->accept();
    qApp->exit();
}

//--------------------------------------------------------------------------------------
void cUConvMainWindow::loadWindowState()         // Load and apply window size etc
{
    QSettings settingsFile( "config.ini", QSettings::IniFormat );
    QPoint pos = settingsFile.value("Layout/Pos", QPoint(-1, -1)).toPoint();
    QSize size = settingsFile.value("Layout/Size", QSize(320, 240)).toSize();
    bool maximized = settingsFile.value("Layout/Maximized", false).toBool();

    resize(size);

    if( pos == QPoint(-1,-1) ) {
        QRect r( 0, 0, width(), height() );        // Window rectangle
        move(QApplication::desktop()->screenGeometry().center() - r.center());
    }
    else
        move(pos);

    if( maximized )
        setWindowState(windowState() ^ Qt::WindowMaximized);

    int stateNum = settingsFile.value("Layout/StateNum", 0).toInt();
    QByteArray stateArray = settingsFile.value(QString("Layout/StateData%1").arg(stateNum)).toByteArray();
    restoreState(stateArray, stateNum);
}

//--------------------------------------------------------------------------------------
void cUConvMainWindow::saveWindowState()         // Save window size etc
{
    QSettings settingsFile( "config.ini", QSettings::IniFormat );
    settingsFile.setValue("Layout/Maximized", isMaximized());
    if( !isMaximized() ) {
        settingsFile.setValue("Layout/Pos", pos());
        settingsFile.setValue("Layout/Size", size());
    }

    int stateNum = 0;
    QByteArray stateArray = saveState(stateNum);
    settingsFile.setValue(QString("Layout/StateData%1").arg(stateNum), stateArray);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.4.2010, 20:23
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9642
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Lonely_hermit @ 14.4.2010, 2:02) *
и два сплиттера между ними
если мне не изменяет память, то для корректного восстановления панелей инструментов, компоновщиков и т.п. нужно соответствующим объектам установить objectName, а потом использовать saveState/restoreState
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.8.2018, 9:48