【问题标题】:Native Handle of QMdiSubWindowQMdiSubWindow 的原生句柄
【发布时间】:2015-12-25 18:58:10
【问题描述】:

我正在尝试获取我添加到 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!");

它适用于主窗口。代码放在主窗口的构造函数中。子窗口类的类型是QDialog。

任何想法如何让它工作?

【问题讨论】:

  • 如果 Qt 小部件不是顶级窗口,我认为它们是不可能的。
  • 我发现这可以通过关闭外星小部件来实现。

标签: c++ qt hwnd


【解决方案1】:

你可能有一个正确的HWND,但它实际上可能不是你要找的那个(一个可见的窗口实际上可以由几个嵌套的窗口组成:你可能相信你在真正希望的时候选择了正确的窗口去接它的孩子或父母)。

我建议您使用Microsoft spy tool,使用finder tool 选择您感兴趣的mdi 小部件(直接在您显示的GUI 上),spy 工具会给您它的HWND。然后你可以检查 Qt 报告你相同的 id。

【讨论】:

  • 感谢您的回答。我关闭了 Qt Alien Widgets 以便每个小部件都是一个原生窗口。后记我执行了与上面相同的代码并使用 spy++ 检查了结果。我看到窗口属性中的标题已更改,但ui中的窗口标题没有更改。你知道为什么吗?
  • 它可能只是一个刷新问题。或者,您更改​​标题的窗口不是显示为父 mdi 窗口的窗口
  • 如果我为主窗口运行相同的代码,它不需要任何类型的刷新,所以我认为这里没有必要。如果我使用 spy++ 悬停发生属性更改的窗口,它会悬停正确的窗口。我不知道 qt 如何绕过来自 winapi 的命令..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多