crossplatform.ru

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

> QDockWidget & resize, Начальный размер для QDockWidget
DmP
  опции профиля:
сообщение 14.6.2009, 3:11
Сообщение #1


Студент
*

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

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




Репутация:   2  


Привет!
Вот задумался над тем, как задать начальный размер для QDockWidget. Не всегда хочется переопределять sizeHint().
Получился такой хак, позволяющий задать размер для нижнего дока, может кому пригодится:
#include <../src/gui/widgets/qmainwindowlayout_p.h>

MainForm::MainForm() : QMainWindow()
{
    setupUi(this);

    QMainWindowLayout* mwl = 0;
    const QObjectList& list = children();
    for (int i=0; i<list.size(); i++)
    {
        QObject* o = list.at(i);
        if (qstrcmp(o->metaObject()->className(), "QMainWindowLayout") == 0)
        {
            mwl = (QMainWindowLayout*)o;
            break;
        }
    }
    if (mwl)
    {
        QDockAreaLayout& dal = mwl->layoutState.dockAreaLayout;
        dal.docks[QInternal::BottomDock].rect = QRect(0, 0, 0, 100);
    }
}

Да, код написан на Qt 4.5.1
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
SABROG
  опции профиля:
сообщение 14.6.2009, 15:19
Сообщение #2


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

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

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




Репутация:   34  


Цитата(DmP @ 14.6.2009, 15:41) *
А для однострочного варианта, одна скобка лишняя ;)

Поспорим, что нет? ;)

Цитата(DmP @ 14.6.2009, 15:41) *
SABROG, был у меня вариант с layout(), но отладчик упорно не хотел сознаваться в том, какое настоящее имя класса

А я просто обошел рекурсией всё дерево и потом сравнил указатели. Кстати еще такой вариант работает:

QObject *o = findChild<QObject *>("_layout");


Сообщение отредактировал SABROG - 14.6.2009, 15:25
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DmP
  опции профиля:
сообщение 14.6.2009, 17:29
Сообщение #3


Студент
*

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

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




Репутация:   2  


Цитата(SABROG @ 14.6.2009, 16:19) *
Цитата(DmP @ 14.6.2009, 15:41) *
А для однострочного варианта, одна скобка лишняя ;)

Поспорим, что нет? ;)

У меня работает. :)

Цитата(SABROG @ 14.6.2009, 16:19) *
А я просто обошел рекурсией всё дерево и потом сравнил указатели. Кстати еще такой вариант работает:

QObject *o = findChild<QObject *>("_layout");

Но никто не гарантирует, что они вдруг не поменяют имя объекта.
Странно то, что по идее самый правильный вариант:
QMainWindowLayout* o = findChild<QMainWindowLayout*>();

Компилируется, но не линкуется, видимо не все полезное экспортируется.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 23.11.2024, 10:00