在Qt中实现winevent时WM_PAINT必要的
is WM_PAINT necessary while implementing winevent in Qt
我的Qt应用程序是从外部设备读取数据,对其进行分析,然后在屏幕上显示结果。由于我需要使用GUI,我选择了Qt而不是Winforms。我不知道该设备仅适用于Windows消息。该设备带有静态库和预定义功能。我能够从我的应用程序访问设备(并获取状态参数)。问题出在Windows消息上。我需要从设备读取缓冲区,并为该设备发送BUFFER_FULL消息。我为此使用了QWidget::winevent函数。我的实现如下所示。
在主窗口中。
virtual bool winEvent(MSG *message, long *result);
在主窗口中.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
传递给CreateWindowEx
hWndParent
来创建的。我不确定Qt是否提供这样的功能,很可能没有。
你可以继续使用QWidget
但对我来说似乎有点过分了。如果你继续QWidget
那么你至少应该隐藏它。
请注意,我假设您的winEvent
实现是正确的。你还没有全部展示出来。具体而言,您尚未显示为要接收默认处理的消息返回false
的代码。
看来我的假设是错误的。您未能从winEvent
返回值。只要启用警告,编译器就会发出警告。你必须这样做,然后注意警告。您的winEvent
应该是:
bool MainWindow::winEvent(MSG *message, long *result)
{
switch(message->message)
{
case BUFFER_DONE:
qDebug()<<"***---BUFFER_DONE---***";
return false;
}
return false;
}
- "WM" C++是什么意思?
- 如何访问委托的paint()函数中的另一个索引?
- 直接在QlistView上绘制小部件,并使用QStyleDitemdelegate :: Paint()
- QT4:在所有qgraphicsItem上的单个qgraphictem rapers paint()上的update()
- 什么是窗口最大化/最小化/恢复的WM Windows消息
- Qt. 方法显示文本() 如果我在 QStyledItemDelegate 中定义了 paint() 方法不起作用
- 如何在我的子类控件paint方法中在默认的paint结果之上绘制一些东西
- 请求X11在C或C++中合成WM的图像
- Qt QTableView paint() 事件无限期交付,占用 100% 的 CPU 内核
- Paint QPushButton with QLinearGradient
- Paint Job Estimator C++
- Q即使宽度和高度都为非零,也不调用ridget paint
- Qt paint事件崩溃
- 如何使用插槽实时更新paint()
- paint函数中的QStyleOptionViewItem参数-如何处理它
- 除非先使用MS Paint打开/保存文件,否则带有QRCode位图的LoadImage()将失败
- 如何将使用Qt Paint Application绘制的图像传输到Mat openCV
- OpenGL新手,致力于"paint"程序
- 如果在WM/CE平台中用于卸载,DMProcessConfigXML将关闭正在运行的应用程序
- 重写QGraphicsItem的paint()和mouseEvents()