Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: uriel от Май 17, 2008, 19:03



Название: Перекрытие окон
Отправлено: uriel от Май 17, 2008, 19:03
Возможно, вопрос немного глупый, но я так и не понял, в чём причина.
Имеется окно наследника QWizard, в него добавлена собственная кнопка, которая связана со слотом. В этом слоте создаётся новый виджет и вызывается для него show(). Проблема в том, что этот виджет появляется в левом верхнем углу экрана и при перемещении его в область окна QWizard'а скрывается оным. Пытался поставить ему флаг AlwaysStayOnTop - не помогло. Сходу в ассистенте не нашёл ничего подобного.
Как можно задать, какое окно будет перекрывать какое?
P.S. Новый виджет имеет родителем QWizard, хотя можно оставить и без предка - результат один.
P.P.S. Можно ли как-то задать начальную координату окна не в координатах, а навроде Center, BottomLeft, etc?


Название: Re: Перекрытие окон
Отправлено: pastor от Май 17, 2008, 20:39
По поводу перекрытия: см. setWindowModality

По поводу расположения немного неясно. Где нужно расположить созданное окно?


Название: Re: Перекрытие окон
Отправлено: uriel от Май 17, 2008, 21:04
Модальность - это немного не то. :) Главное окно не блокирует дочернее, а всегда рисуется поверх него. Даже с установленной модальностью для дочернего.
А про расположение навеяно опять же QWizard.
Простой код:
Код:
QWizard *wzd = new QWizard;
QPushButton *pb = new QPushButton;
wzd->show();
pb->show();
Итог: кнопка расположена в левом-верхнем углу экрана, а мастер - по центру.
Ради интереса, кстати, можно попробовать поперемещать окно кнопки по области мастера. Вопрос прояснится. ;)


Название: Re: Перекрытие окон
Отправлено: pastor от Май 18, 2008, 02:03
С перекрытием проблему можно решить например так:

Код:
QWizard *wzd = new QWizard;
QPushButton *pb = new QPushButton;
pb->setWindowFlags(Qt::WindowStaysOnTopHint);
wzd->show();
pb->show();

Позицию нового окна (в данном случае это QPushButton) можно изменить так:

Код:
pb->move(<your_position>);


ЗЫ: а что это за флаг такой AlwaysStayOnTop? в ассистанте я ненашел такого


Название: Re: Перекрытие окон
Отправлено: uriel от Май 18, 2008, 15:11
Имя флага набирал руками и малость перепутал, извиняюсь. :)
А у Вас-то приведённый выше код работает нормально? У меня окно мастера всё равно перекрывает кнопку.
Ах да, Qt 4.4.


Название: Re: Перекрытие окон
Отправлено: pastor от Май 18, 2008, 15:46
Имя флага набирал руками и малость перепутал, извиняюсь. :)
А у Вас-то приведённый выше код работает нормально? У меня окно мастера всё равно перекрывает кнопку.
Ах да, Qt 4.4.

Да, работает нормально Qt 4.3.4. На Qt 4.4.0 не проверял. Проверю отпишусь.