c++ - QT 重绘/重绘/更新/做某事

标签 c++ qt refresh

我是 QT 的新手。我知道您可以强制刷新显示,但我已经竭尽全力试图弄清楚如何。这是我特别想做的事情。

我按下一个按钮(onClick 信号事件),该按钮运行代码以更改显示器上的图像(QLabel),等待输入,然后继续更改新图像(不同的 QLabel)。我已经尝试了所有方法,并且在 onclick 信号事件代码完成之前显示不会刷新。现在,我不是在等待用户输入,而是使用 usleep(~500 ms) 进行测试。

根据我的阅读,QT 是事件驱动的,这意味着我基本上是在创建一堆事件,这些事件被放入一个队列中,并在(onClick 信号事件)返回到(主循环)/(事件时执行)处理程序)。我不想等到函数完成,如果我必须完全基于事件来完成这个例程,那会让编程变得非常痛苦。

如何强制 QLabel 像素图刷新。我什么都试过了。下面是我在 onClick 信号事件处理程序中尝试过的所有代码。 (upButton 是 QLabel 的名称,它是一个像素图)

update();
repaint();
ui->upButton->setUpdatesEnabled(TRUE);
update();
repaint();
QPaintEvent paintevent(ui->upButton->childrenRegion());
QPaintEvent * test = &paintevent;
paintEvent(test);
this->changeEvent(test);
ui->upButton->update();
ui->upButton->repaint();
ui->upButton->repaint(ui->upButton->childrenRegion());
repaint();
QApplication::sendPostedEvents();
this->parentWidget()->update();
usleep(100000);

如您所见,我现在只是在黑暗中拍摄。我试图查看示例代码并完成所有作业,但我迷路了。感谢任何帮助、建议和/或示例代码。

最佳答案

我使用 sleep 来模拟计算机等待某事发生的短暂时间。

正如我在问题中所说,我不想使用事件,因为要完成一件极其简单的事情是一大堆不必要的工作。

此外,程序继续运行所需的“事件”是 USB 事件。由于我使用的是 HID 类设备,因此无法设置事件在没有等待循环的情况下发生。 USB HID 类不允许设置中断,操作系统声称该设备。

我设法让上述工作。我走过调试器,注意到显示器会在 sleep 功能之前刷新。独立运行程序,我得到了随机结果,显示刷新率为 1%。我摆脱了 sleep 功能,并在其中添加了一些其他代码来模拟延迟,这很好。

据大家所知,这是可能的,不是禁止的,而且很容易做到以下几点:

qApp->processEvents();

qApp 是 QApplication header 中的全局外部变量。

因为这个 USB 事件让我的流程变得棘手,所以我偶然发现了 QWaitCondition 类。我打算开始一个等待 USB 事件的进程。我会等到进程释放等待条件,让我的例程继续。

但是,如果有人认为这是一个坏主意,请说出来。非常感谢您的反馈 PiedPiper 和 Hostile Fork。

谢谢。

关于c++ - QT 重绘/重绘/更新/做某事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2052907/

相关文章:

c++ - 构建 Qt Static 5.3.2 时出错

android - 使用 TabLayout Android 时如何刷新每个 Activity ?

c++ - 我可以使用桥接 header 在基于 Swift 的项目中导入 Objective-C++ 类吗?

c++ - AVL树旋转问题

C++循环问题

javascript - 如何使用 Google OAuth2 javascript 获取刷新 token ?

ASP.Net刷新页面再次发送电子邮件

c++ - 有人可以解释 brainfuck 吗?

qt - 使用 QtMultimedia 从 MP3 文件中读取原始 PCM 样本?

qt - QML 布局不限制 child 的宽度