Qt,该怎么解决
发布时间:2010-05-30 19:49:45 文章来源:www.iduyao.cn 采编人员:星星草
Qt
我设计了一个串口工作线程和界面刷新主线程。
串口线程如下:
#include "thread.h"
#include "mainwindow.h"
#include
#include
Thread::Thread()
{
//初始化
}
Thread::~Thread()
{
mutex.lock();
abort = true;
mutex.unlock();
wait();
}//析构
void Thread::run() //这就是线程的具体工作了
{
// qint64 f=0;
int i;
int fd;
int nread=1;
//int nwrite
int count=0;//size of writed buff
fd=open("/dev/ttySAC1",O_RDONLY | O_NOCTTY);
set_speed(fd,115200);
if(set_Parity(fd,8,1,'N')==FALSEE)
{
printf("Set Parity Errorn");
exit (0);
}
while(!abort)
{
qDebug()<<"r:"<<QThread::currentThreadId();
nread=read(fd,buff1,1);
qDebug()<<"rea";
if(nread>0)
{
buff[count]=buff1[0];
count++;
// qDebug()<<count;
}
if(count==16)
{
dosomething;
count=0;
emit receiver16(nameflag,time,datas);
msleep(85);
nameflag=0;
}
}
close(fd);
}
界面主线程:
#include "mainwindow.h"
#include
#include
#include
void MyMainWindow::paintEvent(QPaintEvent *)
//paintEvent函数由系统自动调用,用不着我们人为的去调用。
{
QPainter paint;//1024*768
paint.begin(this);
/*画一大堆东西*/
qDebug()<<"paint";
paint.end();
}
MyMainWindow::MyMainWindow(QWidget *parent)
:QWidget(parent)
{
setGeometry(0,0,1024,768);
ioread= new Thread;
timer = new QTimer;
timerPon= new QTimer;//总共4个定时器,但结构都是这样的
ioread->start(QThread::InheritPriority);
connect(ioread,SIGNAL(receiver16(int,char *,char *)),this,SLOT(display(int,char *,char *)));
connect(timer, SIGNAL(timeout()), this, SLOT(timerFunction()));
connect(timerPon, SIGNAL(timeout()), this, SLOT(timerFunctionPon()));
//初始化;
}
void MyMainWindow::display(int nameflag,char *time,char *datas)
{
qDebug()<<"dis:"<<QThread::currentThreadId();
DoSth……;
update();
}
void MyMainWindow::timerFunction()
{
cttimerDoSth;
}
void MyMainWindow::timerFunctionPon()
{
PonttimerDoSth;
}
运行了一段时间(一般是几个小时后)界面卡住不动了,定时器计时都不显示了,这是怎么回事啊?
------解决思路----------------------
不应该在QThread上定义信号,应该在run()中new一个对象,信号在该对象内定义,然后连接。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
Qt Creator 2.1 Beta 2 和Qt 4.7.1 发布
转载:http://www.cmdn.net/news/1148
诺基亚发布了Qt框架的跨平台开发环境(IDE) –Qt Cre...
-
Qt菜单的显示问题
我的是在ubuntu11.10虚拟机上运行的qt creator4,现在刚入门,按照http://www.yafeilinux.com/?p=30的例子添加菜单...
-
'make' 不是内部或外部命令,也不是可运行的程序或批处理文件?
根据HTML code
http://v.youku.com/v_show/id_XMTA1NDEzODUy.html
的...
-
visual studio 2010编译qt的demo无法运行,求教。
安装的qt-win-opensource-4.8.0-vs2010.exe和qt-vs-addin-1.1.10.exe
然后想运行...
-
QT,'HANDLE'没有命名的一个类型
网上说QT是,一处编写,处处编译,可是我在windows下写好了串口通讯程序,在linux下编译时,却提示'HANDLE'...
-
关于QT的授权
一直都没搞懂QT的商业授权是怎么回事,请问如果我用QT在电视机机顶盒上开发一款基于QT的播放器,如果我没有获得商业授...
-
有关QTable制作表格保存问题
我使用的是QT2,需要制作一个表格,然后输入数据后保存。我源码在以下网址,set.zip压缩包中http://www.qt...
-
Qt怎样禁止用户最大化窗口
用Qt写一个窗口,如果继承QDialog,那窗口就只有关闭按钮,如果继承QWidget,那么就有关闭,最大化,最小化三个按...
-
QT4.4.3版本窗体透明后界面失去焦点无法响应键盘事件
用的是Qt4.4.3版本,窗体透明的方法如下:
C/C++ code
QPalette pal = pale...
-
QT4下载到开发板的问题
友善的2440开发板,按照一些教程装好了QT4在Linux下的开发环境。
用NFS启动开发板,把arm版编译出来的应用程...