crossplatform.ru

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

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


Студент
*

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

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




Репутация:   0  


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

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


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 23.4.2008
Из: г. Киров
Пользователь №: 155

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




Репутация:   1  


Цитата(NordWest @ 23.10.2009, 16:12) *
А вот как бы иметь возможность запомнить: что и как понавешано, чтобы при следующем открытии не приходилось снова всё распихивать?

QMainWindow::saveState(), и это значение сохранить в реестр, востанавливается QMainWindow::restoreState()

Сообщение отредактировал fsMark - 23.10.2009, 15:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 23.10.2009, 20:44
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.10.2009, 20:54
Сообщение #4


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

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

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




Репутация:   94  


Цитата(fsMark @ 23.10.2009, 19:26) *
QMainWindow::saveState(), и это значение сохранить в реестр, восстанавливается QMainWindow::restoreState()
К этому надо ещё одну важную деталь добавлять, сохраняться/восстанавливаться будут только те виджеты для которых задано имя объекта, через setObjectName (как это "делает" Дизайнер)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JuryS1806
  опции профиля:
сообщение 1.11.2009, 22:14
Сообщение #5


Студент
*

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

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




Репутация:   0  


Это точно ! если не назначить имя объекта, срабатывает как-то странно . Спасибо за подсказку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 1.11.2009, 22:23
Сообщение #6


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

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

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




Репутация:   2  


раз тема про QDockWidget есть тоже вопрос. есть много QDockWidget`s соединённых через tabifyDockWidget как можно показать определённый DockWidget?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.11.2009, 22:42
Сообщение #7


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

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

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




Репутация:   94  


Цитата(DEADHUNT @ 2.11.2009, 1:23) *
есть много QDockWidget`s соединённых через tabifyDockWidget как можно показать определённый DockWidget?
поищи по форуму, кто-то основательно озадачивался вопросом программного управления QDockWidget`ов, не помню кто именно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.11.2009, 12:41
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(Litkevich Yuriy @ 1.11.2009, 22:42) *
Цитата(DEADHUNT @ 2.11.2009, 1:23) *
есть много QDockWidget`s соединённых через tabifyDockWidget как можно показать определённый DockWidget?
поищи по форуму, кто-то основательно озадачивался вопросом программного управления QDockWidget`ов, не помню кто именно.

Кто же еще мог заморачиваться :lol:
В блоге даже написал по этому поводу. И это еще, чтобы показать нужный виджет.

Сообщение отредактировал SABROG - 2.11.2009, 12:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.11.2009, 16:22
Сообщение #9


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

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

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




Репутация:   94  


Цитата(SABROG @ 2.11.2009, 15:41) *
Кто же еще мог заморачиваться
извини из головы выпало :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 2.11.2009, 17:27
Сообщение #10


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

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

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




Репутация:   2  


Цитата(SABROG @ 2.11.2009, 12:41) *
Кто же еще мог заморачиваться :lol:
В блоге даже написал по этому поводу. И это еще, чтобы показать нужный виджет.

в примере идёт определение текущего видимого QDockWidget`а через QTabBar, а мне надо что-то типа setCurrentIndex, setCurrentWidget из QTabWidget только для программного управления QDockWidget`ами

вообще-то ниже нашёл то что надо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 31.3.2020, 4:03