天嵌 ARM开发社区

 找回密码
 注册
查看: 1159|回复: 6

TQ2440线程访问qtopia设计的用户界面问题

[复制链接]
cqqjj3887 发表于 2013-4-28 11:19:17 | 显示全部楼层 |阅读模式
现在利用qtopia设计了一个用户界面,想利用线程不断刷新文本框以显示需要的数据。用户界面自动生成的类名为first
class first : public QWidget
{
    Q_OBJECT

public:
    first( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
    ~first();
    QLabel* ant1_sensor2_text;

   ....
}
现在创建了一个指向该类的指针变量first*  class_test;
然后创建了一个线程create_thread_flag=pthread_create(&a_thread,NULL,thread_function,NULL);
想要在函数void *thread_function(void *arg)访问控制用户界面
例如想控制文本框QLabel* ant1_sensor2_text;
我直接用的class_test ->ant1_sensor2_text ->setnum(9);
使用make命令能编译通过,但是在进入/opt/EmbedSky/Qte/test_x86后运行程序点击按钮进入线程后,程序自动关掉,并报错,查看线程程序发现如果不加入设置文本框的数据 class_test -> ant1_sensor2_text ->setnum(9);这个语句,可以正常运行,加入后就会直接退出,想问下,怎么才能在线程中利用自定义的功能函数控制用户界面


TQ-lkp 发表于 2013-4-28 11:35:39 | 显示全部楼层
界面和线程的创建顺序贴上来
 楼主| cqqjj3887 发表于 2013-4-28 12:54:05 | 显示全部楼层
class first : public QWidget
{
    Q_OBJECT

public:
    first( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
    ~first();

    QTabWidget* TabWidget2_text;
   .....
   QLabel* ant1_sensor1_text;//文本框类,想通过线程控制该文本框不断刷新想要显示的数据
   ....
}

界面创建程序
first::first( QWidget* parent,  const char* name, WFlags fl )
    : QWidget( parent, name, fl )
{
    if ( !name )
        setName( "first" );
    resize( 734, 376 );
    setCaption( tr( "Tmperature_Sensor" ) );

    TabWidget2_text = new QTabWidget( this, "TabWidget2_text" );
    TabWidget2_text->setGeometry( QRect( 0, 0, 430, 250 ) );

    tab = new QWidget( TabWidget2_text, "tab" );
....
....
}
然后再用open按钮中创建线程
void first::open()
{
        if(create_thread_flag!=0)
        create_thread_flag=pthread_create(&a_thread,NULL,thread_function,NULL);
        printf("create_thread_flag=%d",create_thread_flag);
}
线程函数
void *thread_function(void *arg)
{
  while(!close_thread_flag)
  {   
   first *class_test=(first *)arg;
  class_test->ant1_sensor_text_steNum(9);
  pthread_cancel(a_thread);
}
现在make没问题,运行后会弹出个信息框。。。。was teminated due to application error(11)
卡着几天,麻烦版主解答下,感激不尽。
TQ-lkp 发表于 2013-4-28 14:42:01 | 显示全部楼层
亲,你要看下pthread_create的参数定义了,你压根都没把你的first对象传给线程,你却用
first *class_test=(first *)arg;来赋值 ,不出错才怪
 楼主| cqqjj3887 发表于 2013-4-28 14:46:48 | 显示全部楼层
噢,刚看了论团的一个帖子,是没有传进去,现在问题已经解决了,但是窗口不能一直更新,需要点击以后才能更新,请问有什么函数可以刷新窗口吗
TQ-lkp 发表于 2013-4-28 15:40:09 | 显示全部楼层
据说有一个update
 楼主| cqqjj3887 发表于 2013-4-28 15:43:41 | 显示全部楼层
嗯,试过class_test->update,编译没问题,但是不能更新数据,只有在有事件发生时才会更新数据,比如拖动鼠标就可以一直更新数据,版主还知道其它方法吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-9-27 23:24 , Processed in 1.042033 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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