crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Трабл с QMdiArea
igor_bogomolov
  опции профиля:
сообщение 8.5.2009, 12:36
Сообщение #11


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

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


У меня у самого тема не родная под XP стоит. В Qt Designer поведение такое же, как на картинке чуть выше у Maksus-а.
Но в disigner-е встроенном в eclipse и creator все нормально. Вот я и сделал такой вывод, что в этих IDE формы нормально отображаются в независимости от темы в Windows. Еще к этой мысли подтолкнуло то, что отображение форм там несколько отличается, т.е. нет рамок и заголовка окна, соответственно и форму таскать нельзя.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Maksus
  опции профиля:
сообщение 9.5.2009, 14:02
Сообщение #12


Студент
*

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

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




Репутация:   0  


Кстати, при закрытии дочернего окна (крестиком) уничтожается экземпляр класса окна или просто вызывается метод hide или ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DmP
  опции профиля:
сообщение 9.5.2009, 16:53
Сообщение #13


Студент
*

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

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




Репутация:   2  


Цитата(Maksus @ 9.5.2009, 15:02) *
Кстати, при закрытии дочернего окна (крестиком) уничтожается экземпляр класса окна или просто вызывается метод hide или ?

Если не установлен флаг Qt::WDestructiveClose у QWidget или атрибут Qt::WA_DeleteOnClose, то только прячется.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Maksus
  опции профиля:
сообщение 9.5.2009, 23:53
Сообщение #14


Студент
*

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

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




Репутация:   0  


Почему может не работать ui->mdiArea->addSubWindow(widg) в слоте? В конструкторе срабатывает, а в слоте нет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.5.2009, 17:37
Сообщение #15


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Maksus,
что значит не работает - валится? или ничего не происходит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Maksus
  опции профиля:
сообщение 10.5.2009, 18:20
Сообщение #16


Студент
*

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

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




Репутация:   0  


Цитата(kwisp @ 10.5.2009, 17:37) *
Maksus,
что значит не работает - валится? или ничего не происходит?

Ничего не происходило. Вызвал exec виджета и появилось, хотя в конструкторе и без этого все равботало, сложно объяснить такое поведение.

Теперь проблема в другом, при removeSubWindow(widg) и/или delete widg, окно остается в области, только очищаются элементы, тоесть остается просто пустая форма, такого же размера с таким же заголовком. А при закрытии крестиком, все ОК.

Конечно я начинающий, возможно каких-то принципов не понимаю, но общее впечатление от QMdiArea - неативное, как будто сырой продукт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.5.2009, 18:35
Сообщение #17


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Maksus,
зачем тебе delete?
попробуй ему close() сделать.

код покажешь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Maksus
  опции профиля:
сообщение 10.5.2009, 20:13
Сообщение #18


Студент
*

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

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




Репутация:   0  


Цитата(kwisp @ 10.5.2009, 18:35) *
Maksus,
зачем тебе delete?
попробуй ему close() сделать.

код покажешь?

делал, результат тот же, остается пустое окно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.5.2009, 20:32
Сообщение #19


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(kwisp @ 10.5.2009, 19:35) *
код покажешь?


Сообщение отредактировал kwisp - 10.5.2009, 20:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_LS_*
сообщение 14.5.2009, 13:42
Сообщение #20





Гости








    


Очередной раз вижу эту проблемку. Здесь дело в "плохом стиле". Я знаю, как это поправить - модификация qwindowsxpstyle.cpp - но на этом дело не кончится, т.к. кнопки min, max, close будут рисоваться плохо, и по моему, это уже не лечится, надо менять MDI подход в самом QT.
Поправить: QWindowsXPStyle::styleHint() case SH_WindowFrame_Mask:
заменить
mask->region = d->region(themeData);
на
SIZE sz;
    themeData = XPThemeData(widget, 0, QLatin1String("WINDOW"), WP_MINCAPTION, CS_ACTIVE, option->rect);
    if (!(titlebar->titleBarState & Qt::WindowMinimized)) {
        themeData.partId = WP_CAPTION;
        sz.cy = ::GetSystemMetrics(SM_CYCAPTION) + ::GetSystemMetrics(SM_CXSIZEFRAME);
        themeData.rect.setHeight(sz.cy);
    }
    else
        sz.cy = themeData.rect.height();
    mask->region = d->region(themeData);
    QRect r(mask->region.boundingRect());
    if (0 > (sz.cx = sz.cy - r.height())) {
        r.setHeight(sz.cy);
        mask->region &= QRegion®;
        sz.cx = 0;
    }
    if (sz.cx += option->rect.top() - r.top())
        mask->region.translate(0, sz.cx);
    r = option->rect;
    r.setTop(r.top() + sz.cy);

    if (!(titlebar->titleBarState & Qt::WindowMinimized)) {
        themeData.partId = WP_FRAMEBOTTOM;
        themeData.rect.setBottom(r.bottom());
        if (SUCCEEDED(pGetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_TRUE, &sz))) {
            themeData.rect.setTop(r.bottom() - sz.cy + 1);
            r.setBottom(r.bottom() - sz.cy);
        }
        mask->region |= d->region(themeData);

        themeData.partId = WP_FRAMELEFT;
        themeData.rect = r;
        if (SUCCEEDED(pGetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_TRUE, &sz))) {
            themeData.rect.setWidth(sz.cx);
            r.setLeft(r.left() + sz.cx);
        }
        mask->region |= d->region(themeData);

        themeData.partId = WP_FRAMERIGHT;
        themeData.rect.setRight(r.right());
        if (SUCCEEDED(pGetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_TRUE, &sz))) {
            themeData.rect.setLeft(r.right() - sz.cx + 1);
            r.setRight(r.right() - sz.cx);
        }
        mask->region |= d->region(themeData);
    }

    mask->region &= QRegion(option->rect);
    if (!r.isEmpty())
        mask->region |= QRegion®;
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 19.4.2024, 6:34