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

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

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: Открыть поверх окон  (Прочитано 29025 раз)
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #30 : Июль 08, 2016, 16:26 »

Все в винде нормально работает.
А что "все"? Окно(а) приложения в фокусе поверх других? Ну для такого ОС - уже успех  Улыбающийся


Вы о чем вообще?  Непонимающий
Записан
Bepec
Гость
« Ответ #31 : Июль 08, 2016, 16:39 »

Обострение у него, не обращайте внимания )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #32 : Июль 08, 2016, 17:15 »

Вы о чем вообще?  Непонимающий
Ну вообще-то о том что "поверх окон" означает "другие окна не могут его перекрыть". Такой возможности в Вындоуз я не нашел (хоть с API хоть как). Есть только идиотское TOPMOST которое никого не устраивает.
Записан
Bepec
Гость
« Ответ #33 : Июль 08, 2016, 17:19 »

Хм. А как вы представляете если будут 2 окна поверх всех? Веселый
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #34 : Июль 08, 2016, 17:50 »

Вы о чем вообще?  Непонимающий
Ну вообще-то о том что "поверх окон" означает "другие окна не могут его перекрыть". Такой возможности в Вындоуз я не нашел (хоть с API хоть как). Есть только идиотское TOPMOST которое никого не устраивает.

А Qt::WindowStaysOnTopHint разве не "поверх окон"?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #35 : Июль 08, 2016, 18:24 »

А Qt::WindowStaysOnTopHint разве не "поверх окон"?
Это тот же самый topmost - бей и своих и чужих.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #36 : Июль 08, 2016, 18:45 »

 Qt::WindowStaysOnTopHint поверх ВООБЩЕ ВСЕХ окон, а надо, чтобы был только поверх окон приложения (но не модальным).
Я вот не знаю, как это сделать, честно говоря...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Bepec
Гость
« Ответ #37 : Июль 08, 2016, 19:48 »

В принципе написать можно, всё для этого есть.
Аля берём qApp->windows, цепляемся за сигналы потери/появления фокуса и при каждом проверяем весь список на наличие фокуса и перекрытия.
При полной потере фокуса вобще ничего не делаем, при фокусе внутри супер топ окно выводим на передний план.

Хотя пока не очень ясны все сценарии вроде модальных окон, Ну и конечно вариант наползание активного окна на весь экран.

Т.е. реализовать можно, но нужны будут костыли, т.к. основные проблемы - это реализация оконного менеджера.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #38 : Июль 09, 2016, 12:14 »

Qt::WindowStaysOnTopHint поверх ВООБЩЕ ВСЕХ окон, а надо, чтобы был только поверх окон приложения (но не модальным).
Я вот не знаю, как это сделать, честно говоря...
Я делал так: когда создаем палетки - ставим им topmost, модальным диалогам тоже (иначе палетки их перекроют). Когда приложение теряет фокус - втихаря убираем topmost, причем нативным API (чтобы не мигало). И наоборот - приложение получает фокус - доливаем topmost. Вот такую "систему рычагов" пришлось городить на "самом дружественном" ОС.
Записан
Bepec
Гость
« Ответ #39 : Июль 09, 2016, 12:31 »

Не забываем - самая дружественная для пользователя. А вы, увы, программист Веселый
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #40 : Июль 09, 2016, 18:16 »

Я делал так: когда создаем палетки - ставим им topmost, модальным диалогам тоже (иначе палетки их перекроют). Когда приложение теряет фокус - втихаря убираем topmost, причем нативным API (чтобы не мигало). И наоборот - приложение получает фокус - доливаем topmost.

Да, спасибо, видать, придется как-то так извращаться... Хотя по идее флаг типа Qt::ToolWindow могли бы запилить)
а палетки- это что,кстати?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #41 : Июль 09, 2016, 19:44 »

Qt::WindowStaysOnTopHint поверх ВООБЩЕ ВСЕХ окон, а надо, чтобы был только поверх окон приложения (но не модальным).
Я вот не знаю, как это сделать, честно говоря...

Все зависит от приложения. У меня в приложении каждый виджет открывается как самостоятельное окно. Но мне например не нужно, чтобы было окно над всеми моими открытыми окнами.
А над отдельным окном, так это делать совсем не сложно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #42 : Июль 10, 2016, 10:32 »

Хотя по идее флаг типа Qt::ToolWindow могли бы запилить)
Так он и есть (Qt::Tool) - но по-моему на Вындоуз он никогда не работал (последний раз проверял в 5.2)

а палетки- это что,кстати?
Ну типа "тулзы" или "инфа" - см тот же Photoshop. Простой пример - где вывести координаты мыши? Если просто "в каком-то окне" - замучаетесь его наверх доставать/пристраивать. А бывает что и самое обычное окно нужно сделать floating. Напр "данные загружены" и можно по клавише запускать расчет(ы)
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #43 : Июль 10, 2016, 11:05 »

С 5.6.1 Qt::Tool до сих пор не работает, значит Грустный
Причем я помню, что раньше с Qt::Tool у окна тонкий хедер получался. А сейчас и этого нет Грустный
(Windows 7)

UPDATE: сейчас проверил на 10-й винде... Однако, там все ок, похоже  Непонимающий
« Последнее редактирование: Июль 10, 2016, 11:13 от Racheengel » Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #44 : Июль 10, 2016, 12:09 »

UPDATE: сейчас проверил на 10-й винде... Однако, там все ок, похоже  Непонимающий
Возьмите пример windowFlags. Добавьте еще окно в main
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   ControllerWindow controller;
   controller.show();
 
QWidget * win = new QWidget;
win->setWindowTitle("Test");
win->show();
 
   return app.exec();
}
 
Запустите пример и создайте окно Qt::Tool выбрав бубочку. Теперь активируйте окно "Test" и убедитесь что оно успешно перекрывает окно Tool  Плачущий
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


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