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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.4.1: использование HWND в качестве parent'а  (Прочитано 7593 раз)
mal
Гость
« : Август 21, 2008, 16:06 »

Бен это Данила! Ай нид хелп!
*
Задачка : сделал гуёвую (qt) dll. Снаружи ее зовет виндовое приложение, которое  передает хэндл  (HWND) окна, в котором требуется разместить мое приложение.
Вопрос - как это сделать? Т.е. как задать виджету в качестве парента виндовое окно?

Порылся в местных архивах и нашел упоминание про класс QWinHost. Дальше уже у тролей почитал как это делалось (QWinWidget ) в Qt 3.3.3 (
http://doc.trolltech.com/solutions/qtwinmigrate/ ).
В 4-й Qt ничего подобного не нашел :-( .

Варианты типа пусть дэлелина отработает в своем отдельном окне увы не проходят.
Есть идеи?
Записан
mal
Гость
« Ответ #1 : Август 21, 2008, 16:22 »

порылся еще немного у тролей и нашел, что механизм таки есть, но видимо за отдельные деньги
http://trolltech.com/products/qt/addons/catalog/4/Windows/qtwinmigrate/

существует ли альтернатива?
Записан
lex_newton
Гость
« Ответ #2 : Август 21, 2008, 21:41 »

Покури в сторону SetParent (Win API)
Записан
Alex03
Гость
« Ответ #3 : Август 22, 2008, 07:38 »

Данила-Лёша это Бэн, два дня назад тема была:
http://prog.org.ru/forum/topic_7591_0.html

Но ИМХО это извращение... Модальное окно ещё куда ни шло, а вставка Qt widget-ов в чужое екно....
Записан
Tonal
Гость
« Ответ #4 : Август 22, 2008, 11:13 »

А чем плохо?
Если окно не должно быть модальное а приложение написано на MFC/VCL
У того же TC есть же плагины браузеры, например...
Записан
Alex03
Гость
« Ответ #5 : Август 22, 2008, 13:57 »

А чем плохо?
Если окно не должно быть модальное а приложение написано на MFC/VCL

Не модальное (топ левел) это одно, а "которое передает хэндл  (HWND) окна, в котором требуется разместить мое приложение." уже другое. Начиная с проблемами геометрией/ресайзами/использованием лэйаутов и т.д. Потом отрисовка, возможно различное изображение одних и тех же элементов в базовом приложении и плагине.
Но главная проблема на мой взгляд в различных циклах обработки сообщений, он ведь при этом работает родной MFC/VCL (и пр.), конечно всякие стандартные сообщения (WM_CLOSE, WM_MOUSE_MOVE или как оно там? и т.д.) будут передаваться в WndProc Qt-окна. Но во внутренностях Qt-шного цикла есть ещё много чего, таймеры/idle (хотя допускаю что оно через WM_TIMER), queuedConnection для сигнал/слотов (тоже возможно через какойнить WM_USER+N), сеть (QSocketNotifier) и т.д.
Допускаю что сейчас это всё через виндовую очередь всё идёт (в коде копалься некогда), но где гарантия на будущее?
Всё это ИМХО, у меня нет Qt/MFC Migration Framework, поэтому не могу судить как оно там сделано, хотя очень интересно. Улыбающийся Мож я сильно заблуждаюсь и не всё так печально. Впрочем у меня пока и такой задачи не стояло. Улыбающийся

Цитировать
У того же TC есть же плагины браузеры, например...
Не знаю что такое TC. Улыбающийся Да и плагины всякие бывают, для отдельных окон можно и отдельный тред/процесс породить.

Tonal Всё это моё мнение, ни в коей мере не хочу спорить, скорее наоборот - разобраться как на самом деле, да и плохо/хорошо - понятия относительные, понятно что порой по другому никак и приходится извращаться.
« Последнее редактирование: Август 22, 2008, 14:02 от Alex03 » Записан
mal
Гость
« Ответ #6 : Август 22, 2008, 14:38 »

Шура видел я эту тему ога, после  того как сию создал .
Если задачу так ставят, что я могу поделать...

покурил в сторону SetParent:

значит если мы пытаемся покласть QMainWindow (передаем указательв конструктор, там же делаем SetParent ) на HWND - то ничего не выходит, в смысле что окно наше кутовое создается само по себе, а не внутри HWND.
То же самое происходит и с QFrame - ему в title переносится название парента, но окно создается само по себе, также вне парента. Т.е. имеем парент и вторым окном QFrame.
Таким образом мы имеем два окна  - одно например win32 приложения, и второе

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

ЗЫ Курю в сторону QtWinMigrate ;-)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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