Russian Qt Forum
Ноябрь 28, 2024, 13:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Использование флага Qt::WindowStaysOnTopHint - требуется помощь  (Прочитано 10815 раз)
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
« Последнее редактирование: Май 11, 2010, 09:42 от astramax57 » Записан
dnc2rt
Гость
« Ответ #1 : Май 07, 2010, 08:12 »

w.exec() - должно помочь, хотя если честно, то не знаю ,что ткое QMainDialog... в доках не нашел !
Записан
astramax57
Гость
« Ответ #2 : Май 07, 2010, 08:27 »

Я не стал приводить код целиком.
Код:
//До создания окна создается приложение
QApplication a(argc, argv);

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

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

Прошу прощения, конечно же QMainWindow
« Последнее редактирование: Май 07, 2010, 08:30 от astramax57 » Записан
dnc2rt
Гость
« Ответ #3 : Май 07, 2010, 09:06 »

Два главных окна в проекте еще делать не доводилось, подсказать не могу  Рот на замке (использую 1 QMainWindow и N QDialog)
Записан
astramax57
Гость
« Ответ #4 : Май 07, 2010, 09:46 »

В качестве родителя указывается QWidget или наследник от него, так что нет проблем
Записан
_govorilka
Гость
« Ответ #5 : Май 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.
Записан
astramax57
Гость
« Ответ #6 : Май 11, 2010, 09:41 »

Решено.

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

Всем спасибо за внимание
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 21.