Нашел следующее решение для своей проблемы. Не знаю насколько оно корректно, но может кому-то пригодится или как-то поможет.
В коде C# взял хендл окна и передал его в Qt либу.
C#
System.IntPtr hwnd = form.Handle;
netWorker worker = new netWorker(hwnd);
далее создал класс унаследованный от QFrame с одной единственной целью, чтобы объявить в нем слот для обновления геометрии:
C++ (Qt)
void MyFrame::updateGeometry( QRect newRect )
{
setGeometry(newRect.x(), newRect.y(), newRect.width(), newRect.height());
}
Далее в потоковой функции заюзал виндовый SetParent(pFrame->winId(), m_hwnd). Получилось след. образом:
C++ (Qt)
void Worker::run()
{
int argc = 0;
QApplication app(argc, 0);
app.setQuitOnLastWindowClosed(false);
pFrame = new MyFrame();
pFrame->setWindowFlags(Qt::FramelessWindowHint);
pFrame->setStyleSheet("QFrame{background-color:red;}");
pFrame->show();
HWND newHdns = SetParent(pFrame->winId(), m_hwnd);
connect(this, SIGNAL(geometryChanged(QRect)), pFrame, SLOT(updateGeometry(QRect)));
app.exec();
}
Далее чтобы Qt виджет изменял свои размеры в соответствии с родительский C# окном, переопределил Resize event
C#
private void Form1_Resize(object sender, EventArgs e)
{
System.Windows.Forms.Form form = (System.Windows.Forms.Form)sender;
m_worker.set_Geometry(0, 0, form.ClientSize.Width, form.ClientSize.Height);
}
где m_worker это инстанс класса обертки netWorker.
Далее новые размеры передаются в класс Worker, который эмитит сигнал geometryChanged(QRect):
C++ (Qt)
void Worker::setGeometry(int x, int y, int width, int height)
{
rect.setCoords(x, y, width, height);
emit geometryChanged(rect);
}
Вот собственно и все. Какие-либо комментарии по данной имплементации приветствуются