我是QT的新手.我知道你可以强制显示刷新,但我已经把我所有的头发拉出来试图找出方法.这是我特别想要做的.
我按下一个按钮(onClick信号事件),它运行代码,在显示器上更改图像(QLabel),等待输入,然后通过更改新图像(不同的QLabel)继续.我已经尝试了所有内容,直到onclick信号事件代码完成后,显示才会刷新.现在,我不是在等待用户输入,我正在使用usleep(~500 ms)进行测试.
从我读到的内容来看,QT是事件驱动的,这意味着我基本上创建了一堆事件,这些事件被置于一个空闲状态,并在(onClick信号事件)返回到(主循环)/(事件处理程序)时执行.我不想等到函数完成后,如果我必须完全根据事件完成这个例程,它将使编程非常痛苦.
如何强制QLabel像素图刷新.我已经尝试了一切.下面是我在onClick信号事件处理程序中尝试过的所有代码.(upButton是QLabel的名称,是pixmap)
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);
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我现在只是在黑暗中拍摄.我试着查看示例代码并完成所有作业,但我迷路了.感谢任何帮助,建议和/或示例代码.
Jas*_*zin 23
我正在使用睡眠来模拟计算机等待发生事情的短暂时间.
正如我在我的问题中所说的那样,我不想使用事件,因为完成非常简单的事情需要做很多不必要的工作.
此外,程序继续需要进行的"事件"是USB事件.由于我正在使用HID类设备,因此无法在没有等待循环的情况下设置事件.USB HID类不允许设置中断,操作系统声称设备.
我成功地完成了上述工作.我走过调试器,发现显示器会在睡眠功能之前刷新.独立运行程序,我得到了随机结果,显示屏刷新了1%的时间.我摆脱了睡眠功能,并在其中添加了一些其他代码来模拟延迟,这很好.
只是为了每个人的知识,这是可能的,这是不可能的,并且很容易做到以下几点:
qApp->processEvents();
Run Code Online (Sandbox Code Playgroud)
qApp是QApplication标头中的全局外部变量.
因为这个USB事件使我的流程变得棘手,所以我偶然发现了QWaitCondition类.我打算开始一个等待USB事件的进程.我会等到进程释放我的例程的等待条件才能继续.
但是,如果有人认为这是一个坏主意,请说出来.我非常感谢您对PiedPiper和Hostile Fork的反馈.
谢谢.
我注意到有时当你有多个小部件或小部件内部的小部件时,它会帮助调用他们的repaint()事件.
例如
this->repaint();
this->parentWidget()->repaint();
this->parentWidget()->parentWidget()->repaint();
Run Code Online (Sandbox Code Playgroud)
这比将任何处理推送到另一个Thread或创建其他事件处理程序要容易得多.