Плавающий / всегда над диалоговым окном

#c #winapi #qt #dialog #x11

#c #winapi #qt #диалог #x11

Вопрос:

Я заметил в GIMP, что при открытии диалогового окна родительское окно не отключается. Родительское окно все еще можно использовать, в то время как дочернее окно плавает перед ним. Я хочу сделать то же самое, однако для меня, когда я нажимаю на свое родительское окно, оно отодвигает дочерние элементы назад, так что родительский элемент выходит вперед.

Я использую Qt QDialog, но рад выполнить код, зависящий от платформы, чтобы заставить это работать.

Я искал здесь:http://msdn.microsoft.com/en-us/library/ff700543 (v = против 85).aspx

но, похоже, ничто не делает того, что мне нужно. В настоящее время у меня есть хитроумное решение, в котором я устанавливаю окно на HWND_TOPMOST , когда мое приложение получает фокус, затем отключаю это, когда оно теряет фокус, но это не идеально, поскольку окна сообщений перемещаются за большинство верхних окон. ie.

 SetWindowPos(winId(), stayOnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOACTIVATE);
  

Ответ №1:

Похоже, у меня неправильно настроено родительское управление в моем диалоговом окне! Его нужно было создать в родительском диалоговом окне / главном окне, и тогда он просто заработает.

Ответ №2:

Вам нужно вызвать, setWindowFlags() включая Qt::WindowStaysOnTopHint флаг.

Комментарии:

1. Но это сохраняет его поверх всех окон. Я просто хочу сохранить его поверх родительского. Как обсуждается здесь: qtcentre.org/threads/15464-WindowStaysOnTopHint

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