天嵌 ARM开发社区

 找回密码
 注册
查看: 4503|回复: 7

QT中定时器和pushbutton原来是顺序执行的啊

[复制链接]
765679550 发表于 2012-6-8 15:54:30 | 显示全部楼层 |阅读模式
,原来还以为你并行的。。。今天写了一个程序,定时器执行的程序需要执行很久,然后 pushbutton响应函数就卡住了。。。
TQ-lkp 发表于 2012-6-9 09:01:55 | 显示全部楼层
对这个并不是并行的,如果想并行最好用线程了
 楼主| 765679550 发表于 2012-6-9 10:28:07 | 显示全部楼层
TQ-lkp 发表于 2012-6-9 09:01
对这个并不是并行的,如果想并行最好用线程了

    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    mythread c;
    c.start();
    return a.exec();

main函数是这么做的。
另外在.h文件里面定义了

class mythread : public QThread
{
public:
     void run();
};


.cpp文件这么定义
void mythread::run()
{
  display();
}


  display()是一个现实刷新的函数。我没有添加线程的时候,用的定时器,会造成按钮的响应问题。然后我这么加上了线程,结果就这个display()并没有一直在运行。。反而使得 GUI里面很多功能没了,比如改变字体颜色什么的。数据共享问题吗?
display()是定义在
class my_app : public QWidget 里面的一个public
TQ-lkp 发表于 2012-6-9 16:26:08 | 显示全部楼层
要在线程中循环运行是要加while的:L
 楼主| 765679550 发表于 2012-6-9 16:48:10 | 显示全部楼层
TQ-lkp 发表于 2012-6-9 16:26
要在线程中循环运行是要加while的

问题是一次都运行不起来。。 是加了while(1)的,简化了就没写出来了
TQ-lkp 发表于 2012-6-11 09:29:40 | 显示全部楼层
跨线程来调用ui操作是有问题的,你看下你程序运行的时候终端应该会打印一些警告信息的
最好的方法就是信号和槽关联,线程发送信号到ui,ui来响应信号
 楼主| 765679550 发表于 2012-6-11 09:43:38 | 显示全部楼层
TQ-lkp 发表于 2012-6-11 09:29
跨线程来调用ui操作是有问题的,你看下你程序运行的时候终端应该会打印一些警告信息的
最好的方法就是信号 ...

但是我需要有的函数一直运行,比如显示刷新什么的,有的只需要相应UI上的操作,用信号和槽只能满足后者吧
TQ-lkp 发表于 2012-6-12 12:06:11 | 显示全部楼层
你可以重写ondraw事件来刷新界面
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-17 01:07 , Processed in 1.062500 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表