Название: Использование Qt виджетов в C# Отправлено: kern32 от Апрель 16, 2013, 21:34 Доброго времени суток
Встала задача использования уже написанного Qt приложения в уже написанном на C# приложении :) В примерах Qt есть сампл c:\Qt\4.7.1\examples\activeqt\dotnet\wrapper\. В нем все понятно и никаких вопросов не возникает. Далее создал новый проект на C# с одним единственным окном. Модифицировал либу из примера "wrapper", в которой попытался создать в отдельном потоке QApplication и QFrame. После запуска приложения у меня есть 2 окна - C# и QFrame. Можно ли теперь как-то эти окна связать, чтобы мой QFrame был дочерним окном окна C#? Как это сделать через ActiveQt вроде понятно, но хотелось бы через враппер, если это вообще возможно. Опыта с C# до сегодняшнего дня не было, так что буду признателен за любые подсказки. Заранее спасибо. Worker.cpp Код
Worker.h Код
Program.cs Код
Название: Re: Использование Qt виджетов в C# Отправлено: kern32 от Апрель 17, 2013, 09:10 Нашел следующее решение для своей проблемы. Не знаю насколько оно корректно, но может кому-то пригодится или как-то поможет.
В коде C# взял хендл окна и передал его в Qt либу. Код
далее создал класс унаследованный от QFrame с одной единственной целью, чтобы объявить в нем слот для обновления геометрии: Код
Далее в потоковой функции заюзал виндовый SetParent(pFrame->winId(), m_hwnd). Получилось след. образом: Код
Далее чтобы Qt виджет изменял свои размеры в соответствии с родительский C# окном, переопределил Resize event Код где m_worker это инстанс класса обертки netWorker. Далее новые размеры передаются в класс Worker, который эмитит сигнал geometryChanged(QRect): Код
Вот собственно и все. Какие-либо комментарии по данной имплементации приветствуются :) |