crossplatform.ru

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

> Плавающие QDockWidget., Как запомнить конфигурацию окна и виджетов в нем?
NordWest
  опции профиля:
сообщение 23.10.2009, 15:12
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

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




Репутация:   0  


Здравствуйте!

Есть QMainWindow и множество QDockWidget, которые при запуске прячутся и показываются по мере необходимости. Набор панелек такой. При этом удобно весьма получается иногда прикрепить их к окну по краям в различных сочетаниях, на вкладках. Делается это автоматом при манипуляциях с переносом. А вот как бы иметь возможность запомнить: что и как понавешано, чтобы при следующем открытии не приходилось снова всё распихивать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
JuryS1806
  опции профиля:
сообщение 23.10.2009, 20:44
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 93
Регистрация: 21.10.2009
Из: Нижний Новгород
Пользователь №: 1168

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




Репутация:   0  


// Вот собственно две функции, которые через диалоговые окна открытия и сохранения файлов сохраняют
// лэйаут и геометрию всех виджетов. Проверено в M$ Windows и Linux .

void MainWindow::savePanels()
{
    QString DirToSaveAs = QDir::homePath();
    QString fileName
        = QFileDialog::getSaveFileName(this, trUtf8("Сохранить расположение панелей как..."),DirToSaveAs,trUtf8( "Параметры панелей (*.pan)"));
    if (fileName.isEmpty())
        return;
    QFile file(QString(fileName+".pan"));
    if (!file.open(QFile::WriteOnly)) {
        QString msg = trUtf8("Ошибка при открытии файла %1\n%2")
                        .arg(fileName)
                        .arg(file.errorString());
        QMessageBox::warning(this, trUtf8("Ошибка"), msg);
        return;
    }

    QByteArray geo_data = saveGeometry();
    QByteArray layout_data = saveState();

    bool ok = file.putChar((uchar)geo_data.size());
    if (ok)
        ok = file.write(geo_data) == geo_data.size();
    if (ok)
        ok = file.write(layout_data) == layout_data.size();

    if (!ok) {
        QString msg = trUtf8("Ошибка записи в %1\n%2")
                        .arg(fileName)
                        .arg(file.errorString());
        QMessageBox::warning(this, trUtf8("Ошибка"), msg);
        return;
    }
}

void MainWindow::loadPanels()
{
    QString fileName
        = QFileDialog::getOpenFileName(this, trUtf8("Загрузить расположение панелей..."),("/"),trUtf8( "Параметры панелей (*.pan)"));
    if (fileName.isEmpty())
        return;
    QFile file(fileName);
    if (!file.open(QFile::ReadOnly)) {
        QString msg = trUtf8("Ошибка при чтении %1\n%2")
                        .arg(fileName)
                        .arg(file.errorString());
        QMessageBox::warning(this, trUtf8("Ошибка"), msg);
        return;
    }

    uchar geo_size;
    QByteArray geo_data;
    QByteArray layout_data;

    bool ok = file.getChar((char*)&geo_size);
    if (ok) {
        geo_data = file.read(geo_size);
        ok = geo_data.size() == geo_size;
    }
    if (ok) {
        layout_data = file.readAll();
        ok = layout_data.size() > 0;
    }

    if (ok)
        ok = restoreGeometry(geo_data);
    if (ok)
        ok = restoreState(layout_data);

    if (!ok) {
        QString msg = trUtf8("Ошибка при чтении %1")
                        .arg(fileName);
        QMessageBox::warning(this, trUtf8("Ошибка"), msg);
        return;
    }
}
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
NordWest
  опции профиля:
сообщение 14.12.2009, 11:40
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 86
Регистрация: 26.11.2008
Пользователь №: 433

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




Репутация:   0  


Цитата(JuryS1806 @ 23.10.2009, 21:44) *
// Вот собственно две функции, которые через диалоговые окна открытия и сохранения файлов сохраняют
// лэйаут и геометрию всех виджетов. Проверено в M$ Windows и Linux .


Спасибо, то что надо. Только под виндой пришлось trUtf8() заменить на tr(), т.к. квадратики выдавались. И (+".pan") убрал, т.к. имя получалось "*.pan.pan". Под Lin ещё не пробовал.
А так всё отлично. Спс!

Сообщение отредактировал NordWest - 14.12.2009, 11:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 23.12.2024, 5:14