C++ qmbwindow的本机句柄

C++ qmbwindow的本机句柄,c++,qt,hwnd,C++,Qt,Hwnd,我正在尝试获取我添加到QMdiArea的QMdiSubWindow的HWND 我使用以下代码获取句柄: Dialog* subWindow = new Dialog(this); QMdiSubWindow* sw = ui->mdiArea->addSubWindow(subWindow); (HWND) hwnd = id->winId(); 为了测试它是否有效,我使用了以下代码: SetWindowText(hwnd, "Hello, World!"); SetWi

我正在尝试获取我添加到QMdiArea的QMdiSubWindow的HWND

我使用以下代码获取句柄:

Dialog* subWindow = new Dialog(this);
QMdiSubWindow* sw = ui->mdiArea->addSubWindow(subWindow);
(HWND) hwnd = id->winId();
为了测试它是否有效,我使用了以下代码:

SetWindowText(hwnd, "Hello, World!");
 SetWindowText((HWND) this->winId(), "Hello, World!");
什么也没发生。如果我运行以下代码:

SetWindowText(hwnd, "Hello, World!");
 SetWindowText((HWND) this->winId(), "Hello, World!");
它在主窗口中正常工作。代码放置在主窗口的构造函数中。子窗口类的类型为QDialog


你知道如何让它工作吗?

你可能有一个正确的
HWND
,但它实际上可能不是你要找的那个(一个可见的窗口实际上可以由几个嵌套的窗口组成:当你真的想接它的孩子或父母时,你可能认为你选对了一个)


我建议您使用,使用选择您感兴趣的mdi小部件(直接在显示的GUI上),spy工具将为您提供其
HWND
。然后,您可以检查Qt报告是否具有相同的id。

如果Qt窗口小部件不是顶级窗口,我认为这不可能。我发现这是通过关闭外来窗口小部件实现的。谢谢您的回答。我关闭了Qt Alien窗口小部件,这样每个窗口小部件都是一个nativ窗口。Afterwords我执行了与上面相同的代码,并用spy++检查了结果。我看到窗口属性中的标题已更改,但ui中的窗口标题未更改。你知道为什么吗?这可能只是一个刷新问题。或者,您更改标题的窗口不是显示为父mdi窗口的窗口如果我为主窗口运行相同的代码,它不需要任何刷新,因此我认为这里没有必要。如果我使用spy++悬停发生属性更改的窗口,它将悬停在正确的窗口上。我不知道qt如何绕过winapi中的命令。。