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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как разместить QWidget внутри HWND?  (Прочитано 9430 раз)
anymouse
Гость
« : Сентябрь 24, 2005, 19:14 »

QT - 3.2.3, платформа -  Win32

Задача - есть обычное окно, не QWidget, есть его HWND. Надо разместить виджет внутри этого окна. Т.е. надо сделать виджет child'ом не QWidget'а, а WId.

У класса QWidget есть метод create, который получает в параметрах WId и по идее создает объект QWidget на основе уже созданного окна, этот объект мог бы стать родителем. Но этот create вызывается только в конструкторе с пустыми параметрами.

Подскажите, если кто знает, как это можно сделать?
Записан
MoonRover
Гость
« Ответ #1 : Сентябрь 25, 2005, 13:35 »

этого нельзя сделать средствами самого qt.
может какие-то нездоровые пляски с бубном и помогут, но не стоит.
QWidget может быть потомком только QWidget Подмигивающий
Записан
anymouse
Гость
« Ответ #2 : Сентябрь 25, 2005, 17:55 »

жаль, видно придется использовать MFC :(
Записан
zlatko
Гость
« Ответ #3 : Сентябрь 28, 2005, 11:49 »

я себе не представляю задачи которая решается средствами тупого мфс
и не может быть решена з кт. Может роскажеш про свои глобальние цели?
Записан
anymouse
Гость
« Ответ #4 : Сентябрь 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
Записан
anymouse
Гость
« Ответ #5 : Сентябрь 28, 2005, 21:54 »

вот еще не знаю, можно ли в виндос сделать одно окно потомком другого (разместить его в клиентской области родителя) после создания окна? Если можно, проблема решилась бы, но пока не получилось.
Записан
Garrett
Гость
« Ответ #6 : Октябрь 05, 2005, 15:17 »

Не пробовал поиграться с чистым WinAPI?
Код:

HWND SetParent(
          HWND hWndChild,
          HWND hWndNewParent
          );

В качестве Child передать WId, а parent - твой HWND. Пробовать лень, но вроде должно сработать
Записан
Antoxa1985
Гость
« Ответ #7 : Октябрь 05, 2005, 15:43 »

Цитировать
CWnd (CWnd::FromHandle)
QWidget * QWidget::find ( WId id ) Непонимающий
Записан
anymouse
Гость
« Ответ #8 : Октябрь 13, 2005, 19:19 »

Цитировать

HWND SetParent(
          HWND hWndChild,
          HWND hWndNewParent
          );
Цитировать

с этого начал, не прошло :(

Цитировать

QWidget * QWidget::find ( WId id )

она ищет только среди созданных виджетов, т.е. не создает новый класс (как у МФСи), а возвращает указатель на существующий

Здесь, на сколько я понял, еще проблемы с QApplication, только с моделью кютишного приложения я уже не стал ковыряться
Записан
Sergeich
Гость
« Ответ #9 : Октябрь 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
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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