Название: Qt 4.4.1: использование HWND в качестве parent'а Отправлено: mal от Август 21, 2008, 16:06 Бен это Данила! Ай нид хелп!
* Задачка : сделал гуёвую (qt) dll. Снаружи ее зовет виндовое приложение, которое передает хэндл (HWND) окна, в котором требуется разместить мое приложение. Вопрос - как это сделать? Т.е. как задать виджету в качестве парента виндовое окно? Порылся в местных архивах и нашел упоминание про класс QWinHost. Дальше уже у тролей почитал как это делалось (QWinWidget ) в Qt 3.3.3 ( http://doc.trolltech.com/solutions/qtwinmigrate/ ). В 4-й Qt ничего подобного не нашел :-( . Варианты типа пусть дэлелина отработает в своем отдельном окне увы не проходят. Есть идеи? Название: Re: Qt 4.4.1: использование HWND в качестве parent'а Отправлено: mal от Август 21, 2008, 16:22 порылся еще немного у тролей и нашел, что механизм таки есть, но видимо за отдельные деньги
http://trolltech.com/products/qt/addons/catalog/4/Windows/qtwinmigrate/ существует ли альтернатива? Название: Re: Qt 4.4.1: использование HWND в качестве parent'а Отправлено: lex_newton от Август 21, 2008, 21:41 Покури в сторону SetParent (Win API)
Название: Re: Qt 4.4.1: использование HWND в качестве parent'а Отправлено: Alex03 от Август 22, 2008, 07:38 Данила-Лёша это Бэн, два дня назад тема была:
http://prog.org.ru/forum/topic_7591_0.html Но ИМХО это извращение... Модальное окно ещё куда ни шло, а вставка Qt widget-ов в чужое екно.... Название: Re: Qt 4.4.1: использование HWND в качестве parent'а Отправлено: Tonal от Август 22, 2008, 11:13 А чем плохо?
Если окно не должно быть модальное а приложение написано на MFC/VCL У того же TC есть же плагины браузеры, например... Название: Re: Qt 4.4.1: использование HWND в качестве parent'а Отправлено: Alex03 от Август 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 Всё это моё мнение, ни в коей мере не хочу спорить, скорее наоборот - разобраться как на самом деле, да и плохо/хорошо - понятия относительные, понятно что порой по другому никак и приходится извращаться. Название: Re: Qt 4.4.1: использование HWND в качестве parent'а Отправлено: mal от Август 22, 2008, 14:38 Шура видел я эту тему ога, после того как сию создал .
Если задачу так ставят, что я могу поделать... покурил в сторону SetParent: значит если мы пытаемся покласть QMainWindow (передаем указательв конструктор, там же делаем SetParent ) на HWND - то ничего не выходит, в смысле что окно наше кутовое создается само по себе, а не внутри HWND. То же самое происходит и с QFrame - ему в title переносится название парента, но окно создается само по себе, также вне парента. Т.е. имеем парент и вторым окном QFrame. Таким образом мы имеем два окна - одно например win32 приложения, и второе Больше пробовать не стал, ибо это не есть требуемое решение. Потому, что мне требуется расположить кутовый виджет внутри виндового окна, а не породить отудельно кутовое окно. ЗЫ Курю в сторону QtWinMigrate ;-) |