python导入数据库的数据怎么在qt界面里刷新_qt在程序执行的过程中刷新界面

qt程序执行的过程中,一般是不会仅仅通过setText函数将文字刷新到界面上,如果想根据需要不断地显示文字到主界面上该怎么做呢?

为什么不会刷新界面呢,这是由于调用show函数之后,并不能显示界面,必须调用如下图片的中的a.exec函数才能刷新出界面,而这个函数肯定最后才能执行到,所以一般在主线程中进行的setText向界面上添加文字的操作,只有a.exec()执行后才显示。

自己给自己发信号,编译之后还是在主线程中。因为自己发的信号连接的槽中写个死循环,那主线程也就死掉了,出不来了。自己给自己发信号来刷新界面也是行不通的。

方法一:开启线程,创建一个C++类继承QThread,也能实现,但我认为有以下三个缺点。

缺点一:

线程一般是进行一些费时较长的操作。所以主线程就先执行完,先调到a.exec这个函数。支路线程就可以通过发信号,指导主界面上文字的显示了。但是支路线程发一次信号,而槽函数中调用100次setText,那也是100次执行完之后,只显示最后的一个结果,还是看不到中间的过程,那就采取的方式就是发一次信号setText一次。

缺点二:

让主界面与线程对象通信,线程发信号(信号参数为要发的文字),主界面槽函数连接这个信号,这样线程->start()就能启动线程,执行重写的run函数,在run函数中发信号,刷新界面了。由于start(),run()都不带参数,那我们线程发信号(信号参数为要发的文字)所需要的参数,就只能从线程执行的函数(比如说转移本地数据到远程数据库)当中获取了。这就意味着,我们创建一个本地数据转移到远程的界面之后,本地数据转移到远程这个函数,不能写在界面同名的那个cpp当中,却要写在另外开的一个线程类中。

缺点三:

如果支路线程中,转移数据时,出现了可处理的异常,这时想弹出一个界面,让人工选择判断处理,这是做不到的,因为线程中不能出现ui界面相关的东西,如果出现了,一编译就会报错。

注:或许你能发信号让主界面弹出ui界面,将选择的结果,再通过发信号通知线程,如果这样的话,就得让线程再给主界面发弹出ui界面的信号后,等待一下选择的结果。如何等待呢?我的等待方法是

while(flag)

QThread::sleep(1)

每隔一秒,看看flag是否为true,如果选择完毕后,主界面发信号回来,将flag赋值false,此时支路线程继续往下走。也可行,比较折腾。

方法二:向界面上添加文字时,setText(文字);然后紧接着 qApp->processEvents(),这句代码能及时刷新界面,a.exec()当中其实调用的也是这个函数。

如果初始化的过程中想不停地刷新界面,那就在构造函数中,刷新界面前,调用this->show,然后qApp->processEvents()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值