Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Limetris от Февраль 21, 2014, 12:34



Название: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 12:34

Добрый день.

Требуется разместить окно любого стороннего приложения на форме (или виджете) моего приложения QT.
Handle размещаемого окна известен.

Поиск каких-нибудь механизмов существенных результатов не дал.
У кого есть идеи или решения на этот счет? Также буду благодарен за любой пинок в нужную сторону ))



Название: Re: Размещение стороннего окна на форме QT
Отправлено: Igors от Февраль 21, 2014, 12:53
Ну "просто так" ОС не позволит иметь окно одного приложения внутри другого. Сначала нужно искать как это делается в OC (напр ActiveX), а потом смотреть чему это соответствует в Qt.

А вообще напрашиваетесь на ответы типа "никак", "хочется - перехочется" и.т.п.  :)


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 13:15

Ну "просто так" ОС не позволит иметь окно одного приложения внутри другого. Сначала нужно искать как это делается в OC (напр ActiveX), а потом смотреть чему это соответствует в Qt.

А вообще напрашиваетесь на ответы типа "никак", "хочется - перехочется" и.т.п.  :)


В Windows на уровне в WinAPI это делается не так трудно, на С++ Builder XE проверял, но меня интересует именно QT.
Но за мысль спасибо, сейчас порою и в этом направлении.

P.S. по поводу "никак" и "хочется - перехочется" к сожалению не понял чем напрашивался ))
      Я точно знаю что это возможно, главное желание. А ответ "никак" покажет, что человеку просто не было необходимости это делать.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Bepec от Февраль 21, 2014, 13:22
Или неоправданно сложно сделать :D
Я бы придерживался мнения - просто поместить окно внутри своего окна и "держать" его там. Пользователю в принципе без разницы, окно в окне или окно на окне, главное поведение.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 13:27
Или неоправданно сложно сделать :D
Я бы придерживался мнения - просто поместить окно внутри своего окна и "держать" его там. Пользователю в принципе без разницы, окно в окне или окно на окне, главное поведение.


Сложно, но для меня будет оправдано приобретенным опытом и возможно тем, что это еще кому-то поможет  :)

Окно на окне в принципе тоже вариант, но не хотелось бы до него доходить   :)


Название: Re: Размещение стороннего окна на форме QT
Отправлено: GreatSnake от Февраль 21, 2014, 13:41
Всё зависит от того что и куда будешь встраивать.
Если встраиваемое окно создано чужим сторонним приложением и имеет input focus и окно твое тоже имеет input focus, то можешь сразу похоронить эту затею ибо совместить 2 изолированных input managers не получится :(


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 13:46

Всё зависит от того что и куда будешь встраивать.
Если встраиваемое окно создано чужим сторонним приложением и имеет input focus и окно твое тоже имеет input focus, то можешь сразу похоронить эту затею ибо совместить 2 изолированных input managers не получится :(

input focus - это я как понимаю, свойство окна позволяющее принимать фокус на себя?


Название: Re: Размещение стороннего окна на форме QT
Отправлено: GreatSnake от Февраль 21, 2014, 13:51
input focus - это я как понимаю, свойство окна позволяющее принимать фокус на себя?
Я имел в виду клавиатурный фокус.
Ведь иметь 2 одновременно мигающих курсора навряд ли комуто захочется)


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 14:02
input focus - это я как понимаю, свойство окна позволяющее принимать фокус на себя?
Я имел в виду клавиатурный фокус.
Ведь иметь 2 одновременно мигающих курсора навряд ли комуто захочется)

Аа, с этим проблем нет, фокус может принадлежать только одному элементу в системе, и переходя на одно окно, оно автоматически пропадает на другом.
И тут не будет разницы окно в окне или два окна по отдельности.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: GreatSnake от Февраль 21, 2014, 14:05
Аа, с этим проблем нет, фокус может принадлежать только одному элементу в системе, и переходя на одно окно, оно автоматически пропадает на другом.
И тут не будет разницы окно в окне или два окна по отдельности.
Ню-ню.
Я же не ради трёпа заострил вопрос на этом.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Igors от Февраль 21, 2014, 14:13
В Windows на уровне в WinAPI это делается не так трудно, на С++ Builder XE проверял,
Так и делайте на том же уровне WinAPI - но на кросс-платформенность это не претендует

P.S. по поводу "никак" и "хочется - перехочется" к сожалению не понял чем напрашивался ))
      Я точно знаю что это возможно, главное желание. А ответ "никак" покажет, что человеку просто не было необходимости это делать.
Такая необходимость "себе дороже". Ясно что даже в случае успеха такое окно станет источником многих забот. С др стороны Вы разжигаете/поощряете аппетит пользователя/заказчика - ведь Вы сказали "можно" (а часто хочется и прихвастнуть типа "элементарно" :)). Ну так если можно - тогда давайте вводить там данные, получать результаты и.т.д. - иначе что толку с "показа окна"?, И соскочить уже будет не так просто, ведь Вы уже пообещали... Поэтому немедленно упереться рогом типа "низзя!" = лучшее решение


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 14:14
Ню-ню.
Я же не ради трёпа заострил вопрос на этом.

Ну возможно я чего-то недопонимаю, но при захвате чужих окон, например, из Builder-а я таких проблем не замечал.
Четко был один фокус и переключался как следует.
Одновременно в двух полях ввести что-то нельзя было. :)


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Bepec от Февраль 21, 2014, 14:16
Не замечали != нет.
Дерзайте, пробуйте, отписывайтесь. Мб найдете решение. а мб найдете грабли и расскажите своим последователям.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: GreatSnake от Февраль 21, 2014, 14:17
Одновременно в двух полях ввести что-то нельзя было. :)
Одновременно, конечно не получится.
Но проблем будет куча. Это я гарантирую.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 14:26
Так и делайте на том же уровне WinAPI - но на кросс-платформенность это не претендует

Поэтому я и здесь, надеялся что в QT существует какой-либо свой механизм.

Такая необходимость "себе дороже". Ясно что даже в случае успеха такое окно станет источником многих забот. С др стороны Вы разжигаете/поощряете аппетит пользователя/заказчика - ведь Вы сказали "можно" (а часто хочется и прихвастнуть типа "элементарно" :)). Ну так если можно - тогда давайте вводить там данные, получать результаты и.т.д. - иначе что толку с "показа окна"?, И соскочить уже будет не так просто, ведь Вы уже пообещали... Поэтому немедленно упереться рогом типа "низзя!" = лучшее решение

По поводу заказчика, согласен что его надо держать на нужном месте и в меру пресекать полет фантазии ))

Но к сожалению, такая необходимость возникла по моей инициативе, дабы не ломать половину GUI системы чтобы перенести на QT.
Хотя уже задумываюсь, что лучше сейчас это пересмотреть, чем потом рожать ёжиков ))
Как говориться, инициатива **** инициатора ;D



Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 14:32
Не замечали != нет.
Дерзайте, пробуйте, отписывайтесь. Мб найдете решение. а мб найдете грабли и расскажите своим последователям.

Одновременно, конечно не получится.
Но проблем будет куча. Это я гарантирую.

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


Название: Re: Размещение стороннего окна на форме QT
Отправлено: GreatSnake от Февраль 21, 2014, 14:35
В догонку
фокус может принадлежать только одному элементу в системе, и переходя на одно окно, оно автоматически пропадает на другом.
И тут не будет разницы окно в окне или два окна по отдельности.
нужно различать "фокус окна" и "фокус ввода". Последний определяется GUI-тулкитом приложения, а не системой.
Чтобы приложение активировало этот фокус на конкретном элементе, главное окно должно сначала получить фокус окна от системы и уже input-manager тулкита активирует элемент с фокусом (посылает ему событие или ещё как-нибудь).
Так вот без дополнительных усилий встроенное окно фокус никогда не получит и input-manager встроенного приложения не отработает.
К тому же по нажатию [Tab] из одного окна в другое никогда не попадёшь)
Вот (http://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D0%BA%D1%83%D1%81_%28%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%29) для понимания.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 14:46
нужно различать "фокус окна" и "фокус ввода". Последний определяется GUI-тулкитом приложения, а не системой.
Чтобы приложение активировало этот фокус на конкретном элементе, главное окно должно сначала получить фокус окна от системы и уже input-manager тулкита активирует элемент с фокусом (посылает ему событие или ещё как-нибудь).
Так вот без дополнительных усилий встроенное окно фокус никогда не получит и input-manager встроенного приложения не отработает.
К тому же по нажатию [Tab] из одного окна в другое никогда не попадёшь)
Вот (http://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D0%BA%D1%83%D1%81_%28%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%29) для понимания.

Теперь я понял о чем ты  :)
Согласен, это одна из следующих возможных проблем, и если она возникнет, тогда буду думать решать ее или остановиться.
Сейчас меня интересует только размещение одного окна в другом средствами QT, даже ести там не будет фокуса, уже хорошо  ;D


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Igors от Февраль 21, 2014, 15:01
Хотя уже задумываюсь, что лучше сейчас это пересмотреть, чем потом рожать ёжиков ))
Как говориться, инициатива **** инициатора ;D
Приятно видеть что человек с опытом.

Конкретно "по делу" имею сказать немного - да, Qt знает/помечает свои (т.е. созданные от QWidget) окна и считается с возможностью чужого, в этом случае возвращается "событие не обработано" и управление отдается др обработчикам что зарегистрированы для этого события. О том что окно/контрол из одного процесса может быть вообще прилеплено в другой - никогда не слышал в OSX, все списки окон и.т.п. - только в рамках процесса.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 15:16
Приятно видеть что человек с опытом.

Конкретно "по делу" имею сказать немного - да, Qt знает/помечает свои (т.е. созданные от QWidget) окна и считается с возможностью чужого, в этом случае возвращается "событие не обработано" и управление отдается др обработчикам что зарегистрированы для этого события. О том что окно/контрол из одного процесса может быть вообще прилеплено в другой - никогда не слышал в OSX, все списки окон и.т.п. - только в рамках процесса.

Спасибо, но опыта мне еще много набираться.

Понятно. Тут есть один момент, захватываемые окна также и обрабатываются теми процессами, которые их породили.
Просто должны находиться где-то не на Desktop-е, а в конкретном окне.
Если очень грубо сказать то в своем "эмуляторе" Desktop-а (аж самому страшно от такого сравнения  ;D).

Надо седня "обнулиться", а потом со свежей головой посмотреть на жопу под другим углом  ;D


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Bepec от Февраль 21, 2014, 16:39
Всё просто. Если вы хотите окна "забирать" у десктопа, тогда вам нужно реализовывать его функционал.
Если же вам нужно просто "манипулировать" окном, тогда уже вам достаточно управления им.

PS не стоит забывать, что все интерфейсы обманывают пользователя :D Имитацией трехмерности, красками и прочим :)


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 16:59
Всё просто. Если вы хотите окна "забирать" у десктопа, тогда вам нужно реализовывать его функционал.
Если же вам нужно просто "манипулировать" окном, тогда уже вам достаточно управления им.

PS не стоит забывать, что все интерфейсы обманывают пользователя :D Имитацией трехмерности, красками и прочим :)

Дааа... я иногда тоже хочу быть просто пользователем, что-бы, минимум, не знать как оно все на самом деле устроено  ;D

Средствами QT без применения WinAPI это возможно?


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Bepec от Февраль 21, 2014, 17:37
НЕТ. ведь вы хотите чужое окно захапать. А чужое окно можно захапать только с разрешения менеджера рабочего стола. А менеджер рабочего стола имеет только платформозависимый апи.


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 21, 2014, 17:46
НЕТ. ведь вы хотите чужое окно захапать. А чужое окно можно захапать только с разрешения менеджера рабочего стола. А менеджер рабочего стола имеет только платформозависимый апи.


Понял. Буду думать...

Но в понедельник, седня все... обнуляться  ;D
Удачных выходных, спасибо!


Название: Re: Размещение стороннего окна на форме QT
Отправлено: OKTA от Февраль 21, 2014, 17:51
Так и делайте на том же уровне WinAPI - но на кросс-платформенность это не претендует

Поэтому я и здесь, надеялся что в QT существует какой-либо свой механизм.

Такая необходимость "себе дороже". Ясно что даже в случае успеха такое окно станет источником многих забот. С др стороны Вы разжигаете/поощряете аппетит пользователя/заказчика - ведь Вы сказали "можно" (а часто хочется и прихвастнуть типа "элементарно" :)). Ну так если можно - тогда давайте вводить там данные, получать результаты и.т.д. - иначе что толку с "показа окна"?, И соскочить уже будет не так просто, ведь Вы уже пообещали... Поэтому немедленно упереться рогом типа "низзя!" = лучшее решение

По поводу заказчика, согласен что его надо держать на нужном месте и в меру пресекать полет фантазии ))

Но к сожалению, такая необходимость возникла по моей инициативе, дабы не ломать половину GUI системы чтобы перенести на QT.
Хотя уже задумываюсь, что лучше сейчас это пересмотреть, чем потом рожать ёжиков ))
Как говориться, инициатива **** инициатора ;D




Только не "QT", а "Qt".
И не "говориться", а "говорится"  ;D


Название: Re: Размещение стороннего окна на форме QT
Отправлено: Limetris от Февраль 24, 2014, 09:15
Только не "QT", а "Qt".
И не "говориться", а "говорится"  ;D

Вот спасибо, без этого я бы не выжил  ;D


Название: Re: Размещение стороннего окна на форме QT
Отправлено: OKTA от Февраль 24, 2014, 09:53
Правило хорошего тона  ;)