【问题标题】:How to get the widget window handle to passed to win32 api MessageBox in Qt如何让小部件窗口句柄传递给Qt中的win32 api MessageBox
【发布时间】:2013-10-23 10:58:18
【问题描述】:

简而言之,我想在Qt5.1.1中使用win32Api,还有一个简单的例子。

我想将小部件句柄传递给 WinApi 函数int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType).

第一个参数(HWND hWnd, ...)的问题。

我的尝试:(失败)

WId wind = (HWND)w.winId(); // `w` is the instance of my widget.
MessageBox(wind, "Hello world!", "Message", MB_OK);

如何获取widget(window)句柄,传递给MessageBoxwinapi函数?

【问题讨论】:

  • 为什么消息在小部件之外?通过在小部件外部显示消息,当您调用 MessageBox 时,小部件可能已关闭。

标签: c++ qt winapi qt5


【解决方案1】:

如果你在 Qt 中,所有的小部件都应该有一个 QWidget::winId() 函数。只需拨打winId(),您将获得窗口句柄。

【讨论】:

  • 那些是链接时间错误。编译器不知道MessageBoxMB_OK 的定义在哪里。您必须在使用MessageBox 的文件顶部包含#include <windows.h>
  • 似乎它们是从我使用的 Qt4 到阻止转换工作的 Qt5 的变化。让我研究一下
  • @LionKing 看看this。它使用 ::windowForWidget(widget); 将小部件转换为 QWindow 并允许您访问 handle() 方法,这就是您想要的。
  • 谢谢,但是 qt5 中是否有像 winId() 这样的函数可以直接执行此操作?
  • @LionKing 我不知道,但尝试一个简单的演员MessageBox((HWND)wind, "Hello world!", "Message", MB_OK);。这也应该有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 2010-09-05
  • 2012-12-02
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多