不断更新GUI表单元素,使表单不会挂起
Updating GUI form elements continuously so that Form does not hang
正如标题所述,我正试图通过线程不断更新GUI表单元素,但表单似乎仍然很忙。我不能理解。以下是我如何接近它。
connect(this,SIGNAL(SIGUpdateForm),this,SLOT(MyUpdateMehtod));
现在,每当需要更新表单时,我只需执行以下操作。我在一个新线程中启动了一个方法。然后,新线程触发上述信号。
boost::thread t(&SomeClass::SomeMethod(),this);
一旦某个方法开始,这里就是我所做的
void SomeMethod()
{
SIGUpdateForm(); //Launch the signal that will update the form
}
SIGUpdateForm然后调用MyUpdateMehtod(),但是由于信号(无论是排队的还是直接的,都不会启动任何线程,因此看起来表单是挂起的。)但这让我很困惑,因为信号本身是从一个独立的线程调用的,那么为什么表单挂起呢?我能做些什么来使它工作?
Qt有自己的线程。实际上你不需要一根线。QTimer会帮你做的。下面是一个例子。
void updateForm()
{
ui->bla->setText("bla");
// bla bla method
}
QTimer timer;
connect(&timer, SIGNAL(timeout()), this, SLOT(updateForm()));
timer.start(3000);
现在updateForm()
将每3秒调用一次。GUI不会挂起。另一种方法是处理事件循环
while(....)
{
// some lengthy task
qApp->processEvents(QEventLoop::AllEvents);
}
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何防止C++遗留代码中的挂起指针
- 为什么所有C++编译器都会崩溃或挂起此代码
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 构建挂起,即使是适度的文件大小
- 循环挂起迭代的 std::擦除 on std::list
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- GTK 最大化表单 C++
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- win 表单应用程序字符串^ 到 int
- 从不同进程中的另一个线程挂起/恢复线程或进程
- Boost (Beast) websocket:同步写入挂起
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 为什么析构函数挂起
- 使用互斥会挂起程序
- POCO C 简单表单提交样本不起作用
- 将消息发布到隐藏表单第一次不起作用
- 不断更新GUI表单元素,使表单不会挂起
- cout在控制台窗口中单击鼠标时挂起
- C++哈希表程序在输入值后挂起