gpt4 book ai didi

c++ - 在 Qt 中实现 winevent 时是否需要 WM_PAINT

转载 作者:行者123 更新时间:2023-11-28 02:52:21 25 4
gpt4 key购买 nike

我的Qt 应用程序是从外部设备读取数据,分析它,然后将结果显示在屏幕上。因为我需要使用 GUI,所以我选择了 Qt 而不是 Winforms。我不知道该设备只能处理 Windows 消息。该设备带有静态库和预定义函数。我能够从我的应用程序访问设备(并获取状态参数)。问题来自 Windows 消息。我需要从设备读取缓冲区并为该设备发送 BUFFER_FULL 消息。为此,我使用了 QWidget::winevent 函数。我的实现如下所示。

在mainWindow.h中

virtual bool winEvent(MSG *message, long *result);

在 mainWindow.cpp 中

bool MainWindow::winEvent(MSG *message, long *result)
{
switch(message->message)
{
case BUFFER_DONE:
qDebug()<<"***---BUFFER_DONE---***";
return 0;

case WM_PAINT:
// TODO: set error
qDebug()<<"***---WM_PAINT---***";
return 1;

default:
break;
}
}

在调试应用程序时,它不断收到 WM_PAINT 消息。我还没有实现 WM_PAINT 消息。该应用程序没有任何可显示的内容,此时它几乎“暂停”了。如果没有这个 winevent 实现,它会向我显示清晰的小部件。我认为绘画小部件将由 Qt 处理。我的理解是否正确,还是我需要自己实现 WM_PAINT?

最佳答案

WM_PAINT 的默认处理会很好。它什么都不做,这就是你想要的。但是,您实际上并不需要此处的可视控件。我怀疑你想要的是一个只有消息的窗口。这是通过将 HWND_MESSAGE 传递给 CreateWindowExhWndParent 创建的。我不确定 Qt 是否提供这样的功能,很可能不会。

您可以继续使用 QWidget,但对我来说它确实有点过头了。如果您继续使用 QWidget,那么您至少应该 hide

请注意,我假设您的 winEvent 实现是正确的。你还没有全部展示出来。具体来说,您没有显示为您希望接收默认处理的消息返回 false 的代码。

看来我的假设是错误的。您未能从 winEvent 返回值。如果您启用警告,您的编译器将对此发出警告。您必须这样做,然后注意警告。您的 winEvent 应该是:

bool MainWindow::winEvent(MSG *message, long *result)
{
switch(message->message)
{
case BUFFER_DONE:
qDebug()<<"***---BUFFER_DONE---***";
return false;
}
return false;
}

关于c++ - 在 Qt 中实现 winevent 时是否需要 WM_PAINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22756867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com