crossplatform.ru

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

Maksus
  опции профиля:
сообщение 7.5.2009, 22:12
Сообщение #1


Студент
*

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

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




Репутация:   0  


Создаю главное окно с QMdiArea.
Создаю окно-виджет на базе QWidget.
Добавляю smdi = ui->mdiArea->addSubWindow(widg);

Отображается только часть окна, область размером с заголовок этого дочернего окна. Через эту область перемещая окно можно посмотреть его полностью, оно прорисовано правильно. Но почему отображается только часть окна через этот четырехугольник, как показать всё? Помогите, плиз.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V  < 1 2  
Начать новую тему
Ответов (10 - 19)
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) Link
Кстати, при закрытии дочернего окна (крестиком) уничтожается экземпляр класса окна или просто вызывается метод 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) Link
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) Link
Maksus,
зачем тебе delete?
попробуй ему close() сделать.

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

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


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

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

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




Репутация:   23  


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


Сообщение отредактировал 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
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 12.8.2025, 4:10