Название: Как разместить QWidget внутри HWND? Отправлено: anymouse от Сентябрь 24, 2005, 19:14 QT - 3.2.3, платформа - Win32
Задача - есть обычное окно, не QWidget, есть его HWND. Надо разместить виджет внутри этого окна. Т.е. надо сделать виджет child'ом не QWidget'а, а WId. У класса QWidget есть метод create, который получает в параметрах WId и по идее создает объект QWidget на основе уже созданного окна, этот объект мог бы стать родителем. Но этот create вызывается только в конструкторе с пустыми параметрами. Подскажите, если кто знает, как это можно сделать? Название: Как разместить QWidget внутри HWND? Отправлено: MoonRover от Сентябрь 25, 2005, 13:35 этого нельзя сделать средствами самого qt.
может какие-то нездоровые пляски с бубном и помогут, но не стоит. QWidget может быть потомком только QWidget ;) Название: Как разместить QWidget внутри HWND? Отправлено: anymouse от Сентябрь 25, 2005, 17:55 жаль, видно придется использовать MFC :(
Название: Как разместить QWidget внутри HWND? Отправлено: zlatko от Сентябрь 28, 2005, 11:49 я себе не представляю задачи которая решается средствами тупого мфс
и не может быть решена з кт. Может роскажеш про свои глобальние цели? Название: Как разместить QWidget внутри HWND? Отправлено: anymouse от Сентябрь 28, 2005, 21:52 Цитата: "zlatko" я себе не представляю задачи которая решается средствами тупого мфс и не может быть решена з кт. Может роскажеш про свои глобальние цели? С удовольствием :) Делаю что-то вроде плагина - приложение создает окно и передает его дескриптор (HWND (win) == WId (qt) ) плагину. Плагин размещает на этом окне всякие свои дочерние окна. C MFC все просто - оно умеет создавать объект CWnd (CWnd::FromHandle) на основе HWND, указываешь потом полученный объект в качестве родителя и вперед. QWidget же можно создать только на QWidget'е. Также я не нашел аналога MFC'шному FromHandle, чтобы создать объект QWidget, привязанный к существующему WId. Есть, правда, у QWidget'а защищенный метод create, который в параметрах получает WId, и если он !=0, новое окно не создается, а используется указанное. Но он вызывается в конструкторе с пустыми параметрами, т.е. всегда создается новое окно. P.S. создавать окно плагином не вариант, надо разместить содержимое именно в предоставленном окне. P.P.S. у меня Qt 3.2.3 Название: Как разместить QWidget внутри HWND? Отправлено: anymouse от Сентябрь 28, 2005, 21:54 вот еще не знаю, можно ли в виндос сделать одно окно потомком другого (разместить его в клиентской области родителя) после создания окна? Если можно, проблема решилась бы, но пока не получилось.
Название: Как разместить QWidget внутри HWND? Отправлено: Garrett от Октябрь 05, 2005, 15:17 Не пробовал поиграться с чистым WinAPI?
Код:
В качестве Child передать WId, а parent - твой HWND. Пробовать лень, но вроде должно сработать Название: Как разместить QWidget внутри HWND? Отправлено: Antoxa1985 от Октябрь 05, 2005, 15:43 Цитировать CWnd (CWnd::FromHandle) QWidget * QWidget::find ( WId id ) ???Название: Как разместить QWidget внутри HWND? Отправлено: anymouse от Октябрь 13, 2005, 19:19 Цитировать HWND SetParent( HWND hWndChild, HWND hWndNewParent ); Цитировать с этого начал, не прошло :( Цитировать QWidget * QWidget::find ( WId id ) она ищет только среди созданных виджетов, т.е. не создает новый класс (как у МФСи), а возвращает указатель на существующий Здесь, на сколько я понял, еще проблемы с QApplication, только с моделью кютишного приложения я уже не стал ковыряться Название: Как разместить QWidget внутри HWND? Отправлено: Sergeich от Октябрь 13, 2005, 21:01 твои проблемы должен решить класс QWinWidget из Qt Solution'a Qt/MFC Migration Framework ( см. http://doc.trolltech.com/solutions/3/qtwinmigrate/qwinwidget.html ). Залить Qt Solutions можно с сайта Racheangel'a
|