Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: astramax57 от Май 07, 2010, 08:00



Название: [Решено] Использование флага Qt::WindowStaysOnTopHint - требуется помощь
Отправлено: astramax57 от Май 07, 2010, 08:00
Всем привет.

Есть задача - рисовать окно (наследник от QMainWindow) поверх остальных. Вроде бы ничего сложного.
Много примеров, в т.ч. и на этом форуме, но простейший казалось бы код не работает:

Код:
manager w(a.arguments(), 0, Qt::WindowStaysOnTopHint); //это и есть окно
w.show();
w.activateWindow();
Окно все равно перекрывается другими окнами.
Попробовал передавать флаг не через конструктор, а через w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint); - результат тот же.

После дня мытарств, гугления и т.д. дошел до того, что флаг работает, если виджету указать родителя, причем этот родитель должен быть видимым:

Код:
QMainWindow window;		
window.setWindowFlags(window.windowFlags() | Qt::WindowStaysOnTopHint);
window.show();
window.activateWindow();

manager w(a.arguments(), &window, Qt::WindowStaysOnTopHint); //это и есть окно
w.show();
w.activateWindow();

Что это - кривые руки или баг? Поделитесь опытом. Версия Qt 4.6.2, система XP SP2 x32


Название: Re: Использование флага Qt::WindowStaysOnTopHint - требуется помощь
Отправлено: dnc2rt от Май 07, 2010, 08:12
w.exec() - должно помочь, хотя если честно, то не знаю ,что ткое QMainDialog... в доках не нашел !


Название: Re: Использование флага Qt::WindowStaysOnTopHint - требуется помощь
Отправлено: astramax57 от Май 07, 2010, 08:27
Я не стал приводить код целиком.
Код:
//До создания окна создается приложение
QApplication a(argc, argv);

//здесь создание окна, код приведен в первом посте

//потом вызов упомянутого exec
return a.exec();

Прошу прощения, конечно же QMainWindow


Название: Re: Использование флага Qt::WindowStaysOnTopHint - требуется помо
Отправлено: dnc2rt от Май 07, 2010, 09:06
Два главных окна в проекте еще делать не доводилось, подсказать не могу  :-X (использую 1 QMainWindow и N QDialog)


Название: Re: Использование флага Qt::WindowStaysOnTopHint - требуется помощь
Отправлено: astramax57 от Май 07, 2010, 09:46
В качестве родителя указывается QWidget или наследник от него, так что нет проблем


Название: Re: Использование флага Qt::WindowStaysOnTopHint - требуется помощь
Отправлено: _govorilka от Май 07, 2010, 19:53
Почитай про функцию...
void   QWidget::setWindowModality ( Qt::WindowModality windowModality )

Из справки:
Qt::ApplicationModal - The window is modal to the application and blocks input to all windows.


Название: Re: Использование флага Qt::WindowStaysOnTopHint - требуется помощь
Отправлено: astramax57 от Май 11, 2010, 09:41
Решено.

Меня изначально смущало то, что у всех флаг Qt::WindowStaysOnTopHint работает, а у меня нет. Оценил отличия моей машинки/оси и заметил програмку ultramon (кому интересно - ultramon.com). Выгрузил ее  - и все заработало

Всем спасибо за внимание