crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QDockWidget, расстановка окон
0xF
  опции профиля:
сообщение 30.4.2008, 17:00
Сообщение #1


Студент
*

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

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




Репутация:   0  


В проге нужны перетаскивающиеся окна, создаю их таким образом:
dock[DW_RESOURCE_BROWSER] = new QDockWidget( "Resouce browser", this );
toggleViewAction[DW_RESOURCE_BROWSER] = dock[DW_RESOURCE_BROWSER]->toggleViewAction();

...

dock[DW_RESOURCE_BROWSER]->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
dock[DW_RESOURCE_BROWSER]->setWidget( resourceBrowser );

viewMenu->addAction( toggleViewAction[DW_RESOURCE_BROWSER] );

addDockWidget( Qt::RightDockWidgetArea, dock[DW_RESOURCE_BROWSER] );

Таких окон несколько, и при их добавлении они все выстраиваются в ленту по вертикали, а мне надо, чтоб они при создании добавлялись во вкладки.
Вот так как у меня сейчас:
Прикрепленное изображение


А вот так как мне надо(пертащил окна вручную):
Прикрепленное изображение


Как засунуть панели во вкладки, чтоб не надо было делать это вручную?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.4.2008, 19:10
Сообщение #2


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

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

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




Репутация:   94  


ну глянь пример %QTDIR%\demos\mainwindow
там есть возможность сохранять настройки окна и положение подокон, а также загружать их.
Посмотри как реализована загрузка, что и как настраивается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 30.4.2008, 20:02
Сообщение #3


Студент
*

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

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




Репутация:   0  


Там это сделано через save/restore geometry
Скопипастил загрузку настроек в конструктор, сохранение - в closeEvent
// ** Загрузка
QEditorWindow::QEditorWindow( void )
{
    ...
QString fileName = "settings.set";

QFile file( fileName );

if( !file.open( QFile::ReadOnly ) ) {
    QMessageBox::warning(this, tr("Error"), "");
    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 = tr("Error reading %1")
        .arg(fileName);
    QMessageBox::warning(this, tr("Error"), msg);
    return;
}
}

// ** Сохранение
void QEditorWindow::closeEvent( ... )
{
    QString fileName = "settings.set";

    QFile file( fileName );
    if( !file.open( QFile::WriteOnly ) ) {
        QString msg = "Failed to open" + fileName;
        QMessageBox::warning( this, "Error", msg );
    } else {
        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 = "Error writing" + fileName;
            QMessageBox::warning( this, "Error", msg );
        }
    }
}


В результате восстанавливаются только размеры окна, а положение окошек - нет :( Почему?
Причина редактирования: с тегом code=cpp выглядит лучше
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.4.2008, 22:13
Сообщение #4


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

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

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




Репутация:   94  


потомучто ты на saveState() необратил внимание
void MainWindow::saveLayout()
{
    QString fileName
        = QFileDialog::getSaveFileName(this, tr("Save layout"));
    if (fileName.isEmpty())
        return;
    QFile file(fileName);
    if (!file.open(QFile::WriteOnly)) {
        QString msg = tr("Failed to open %1\n%2")
                        .arg(fileName)
                        .arg(file.errorString());
        QMessageBox::warning(this, tr("Error"), 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 = tr("Error writing to %1\n%2")
                        .arg(fileName)
                        .arg(file.errorString());
        QMessageBox::warning(this, tr("Error"), msg);
        return;
    }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 30.4.2008, 22:25
Сообщение #5


Студент
*

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

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




Репутация:   0  


Как это не обратил? О_о Вот же он:
...
else {
        QByteArray geo_data        = saveGeometry();
        QByteArray layout_data    = saveState(); // *******

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

Ты же о нем?
Причина редактирования: с тегом code=cpp выглядит лучше
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 30.4.2008, 22:32
Сообщение #6


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

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

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




Репутация:   94  


да о нем, просто я прочитал строчку "через save/restore geometry" и в твой код не смотрел, т.к. голова у же не соображает, спать надо :lazy:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 1.5.2008, 15:48
Сообщение #7


Студент
*

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

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




Репутация:   0  


Есть ли ещё какие-нить предложения?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 2.5.2008, 18:58
Сообщение #8


Студент
*

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

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




Репутация:   0  


Оказывается надо вызывать setObjectName для всех окошек...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.5.2008, 19:01
Сообщение #9


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

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

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




Репутация:   94  


не понял, а что это дает?
чтобы в файл имена объектов писались?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 3.5.2008, 0:41
Сообщение #10


Студент
*

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

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




Репутация:   0  


А хз, просто без него не работает и при сохранении Qt пишет в консоль, что имя объекта не задано...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 30.12.2024, 19:41