我把代码贴上来:
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板后,打开界面后就没法响应了,想关闭窗口都不行。