我把代码贴上来:
serial.h:
#ifndef COLLECT_H
#define COLLECT_H
#include <qwidget.h>
class QLabel;
class QString;
class QPushButton;
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget(QWidget *parent = 0, const char *name = 0);
int fd;
char buf[255];
private:
QLabel *label;
protected:
void timerEvent( QTimerEvent * event );
int timer_ID;
};
#endif
serial.cpp:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <strings.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <qlabel.h>
#include "serial.h"
#define BAUDRATE B115200
#define MODEMDEVICE "/dev/ttySAC0"
#define _POSIX_SOURCE 1
MainWidget::MainWidget(QWidget *parent, const char *name): QWidget(parent, name)
{
setCaption(tr("serial"));
label = new QLabel( this);
label->setBackgroundColor(Qt::white);
showMaximized () ;
timer_ID = startTimer( 2000 );
}
void MainWidget::timerEvent(QTimerEvent * event)
{
int fd, res;
struct termios oldtio,newtio;
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
if (fd <0) {perror(MODEMDEVICE); exit(-1); }
tcgetattr(fd,&oldtio);
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0;
newtio.c_cc[VMIN] = 5;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
tcsetattr(fd,TCSANOW,&oldtio);
res = read(fd,buf,255);
buf[res]=0;
printf("%s:%d\n", buf, res);
tcsetattr(fd,TCSANOW,&oldtio);
label->setText(buf);
::close(fd);
}
main.cpp:
#include <qapplication.h>
#include "serial.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWidget *widget = new MainWidget;
app.setMainWidget(widget);
widget->show();
return app.exec();
}
我把它下到arm板后,打开界面后就没法响应了,想关闭窗口都不行。