- 
UID:24730 
 
- 
- 注册时间2007-05-15
 
- 最后登录2023-07-06
 
- 在线时间151小时
 
 
 
- 
- 发帖255
 
- 搜Ta的帖子
 
- 精华0
 
- 金钱2570
 - 威望258
 - 贡献值0
 - 好评度257
 
 
 
- 
访问TA的空间加好友用道具
 
 
 
 
 
 
 
 | 
 
 
在打开串口口,直接调用write函数。给你发一个我写的简单的例子吧! - #include "qserialtool.h"
 - #include <QtGui/QGroupBox>
 - #include <QtGui/QGridLayout>
 - #include <QtGui/QHBoxLayout>
 - #include <QtGui/QVBoxLayout>
 - #include <QtGui/QLabel>
 - #include <QtGui/QComboBox>
 - #include <QtGui/QPushButton>
 - #include <QtGui/QFrame>
 - #include <QtGui/QTextEdit>
 - #include <QtGui/QCheckBox>
 - #include <QtGui/QSpinBox>
 - #include <QtGui/QMessageBox>
 - #include <QTextStream>
 - #include <QtGui/QFileDialog>
 - #include <QFile>
 - #include <QTimer>
 - QSerialTool::QSerialTool( QWidget* parent )
 - : QWidget( parent ), rxlen( 0 ), txlen( 0 ), bOpen( FALSE ),
 - bAutoTx( FALSE )
 - {
 -     glMain = new QGridLayout;
 -     gbPortPara = new QGroupBox( this );
 -     gbPortPara->setTitle( QString( tr("Serial Config") ) );
 -     glPortPara = new QGridLayout;
 -     lbPort = new QLabel( gbPortPara );
 -     lbPort->setText( QString( tr("Serial") ) );
 -     glPortPara->addWidget( lbPort, 0, 0, 1, 1 );
 -     cbPort = new QComboBox( gbPortPara );
 -     QStringList strlistPort;
 -     strlistPort << "COM1" << "COM2" << "COM3" << "COM4";
 -     cbPort->addItems( strlistPort );
 -     glPortPara->addWidget( cbPort, 0, 1, 1, 1 );
 -     lbBaud = new QLabel( gbPortPara );
 -     lbBaud->setText( QString( tr("Baud") ) );
 -     glPortPara->addWidget( lbBaud, 1, 0, 1, 1 );
 -     cbBaud = new QComboBox( gbPortPara );
 -     QStringList strlistBaud;
 -     strlistBaud << "300" << "600" << "1200" << "2400" << "4800"
 -         << "9600" << "19200" << "38400" << "57600" << "115200";
 -     cbBaud->addItems( strlistBaud );
 -     glPortPara->addWidget( cbBaud, 1, 1, 1, 1 );
 -     lbDataBit = new QLabel( this );
 -     lbDataBit->setText( QString( tr("DataBit") ) );
 -     glPortPara->addWidget( lbDataBit, 2, 0, 1, 1 );
 -     cbDataBit = new QComboBox( gbPortPara );
 -     QStringList strlistDataBit;
 -     strlistDataBit << "5" << "6" << "7" << "8";
 -     cbDataBit->addItems( strlistDataBit );
 -     glPortPara->addWidget( cbDataBit, 2, 1, 1, 1 );
 -     lbParity = new QLabel( gbPortPara );
 -     lbParity->setText( QString( tr("Parity") ) );
 -     glPortPara->addWidget( lbParity, 3, 0, 1, 1 );
 -     cbParity = new QComboBox( gbPortPara );
 -     QStringList strlistParity;
 -     strlistParity 
 -         << QString( tr("None") )
 -         << QString( tr("Odd") )
 -         << QString( tr("Even") )
 -         << QString( tr("Mark") )
 -         << QString( tr("Space") );
 -     cbParity->addItems( strlistParity );
 -     glPortPara->addWidget( cbParity, 3, 1, 1, 1 );
 -     lbStopBit = new QLabel( gbPortPara );
 -     lbStopBit->setText( QString( tr("StopBit") ) );
 -     glPortPara->addWidget( lbStopBit, 4, 0, 1, 1 );
 -     cbStopBit = new QComboBox( gbPortPara );
 -     cbStopBit->addItem( QString("1") );
 -     cbStopBit->addItem( QString("1.5") );
 -     cbStopBit->addItem( QString("2") );
 -     glPortPara->addWidget( cbStopBit, 4, 1, 1, 1 );
 -     
 -     lbFlow = new QLabel( gbPortPara );
 -     lbFlow->setText( QString( tr("Flow Control") ) );
 -     glPortPara->addWidget( lbFlow, 5, 0, 1, 1 );
 -     cbFlow = new QComboBox( gbPortPara );
 -     QStringList strlistFlow;
 -     strlistFlow 
 -         << QString( tr("Off") )
 -         << QString( tr("Hardware") )
 -         << QString( tr("Xon/Xoff") );
 -     cbFlow->addItems( strlistFlow );
 -     
 -     glPortPara->addWidget( cbFlow, 5, 1, 1, 1 );
 -     gbPortPara->setLayout( glPortPara );
 -     glMain->addWidget( gbPortPara, 0, 0, 1, 1 );
 -     pbOpen = new QPushButton( this );
 -     pbOpen->setText( QString( tr("Open") ) );
 -     glMain->addWidget( pbOpen, 1, 0, 1, 1 );
 -     glMain->setAlignment( pbOpen, Qt::AlignCenter );
 -     
 -     gbStatus = new QGroupBox( this );
 -     gbStatus->setTitle( QString( tr("Status") ) );
 -     glMain->addWidget( gbStatus, 2, 0, 1, 1 );
 -     glStatus = new QGridLayout;
 -     lbSerialStatus = new QLabel( gbStatus );
 -     lbSerialStatus->setText( QString( tr("Serial Status:") ) );
 -     glStatus->addWidget( lbSerialStatus, 0, 0, 1, 1 );
 -     leSerialStatus = new QLabel( gbStatus );
 -     leSerialStatus->setFrameStyle( QFrame::Panel|QFrame::Sunken );
 -     leSerialStatus->setAlignment( Qt::AlignCenter );
 -     leSerialStatus->setText( QString( tr("Closed") ) );
 -     glStatus->addWidget( leSerialStatus, 0, 1, 1, 1 );
 -     lbSendBytes = new QLabel( gbStatus );
 -     lbSendBytes->setText( QString( tr("Send Bytes:") ) );
 -     glStatus->addWidget( lbSendBytes, 1, 0, 1, 1 );
 -     leSendBytes = new QLabel( gbStatus );
 -     leSendBytes->setFrameStyle( QFrame::Panel|QFrame::Sunken );
 -     leSendBytes->setAlignment( Qt::AlignCenter );
 -     leSendBytes->setText( QString().setNum( txlen ) );
 -     glStatus->addWidget( leSendBytes, 1, 1, 1, 1 );
 -     lbReceiveBytes = new QLabel( gbStatus );
 -     lbReceiveBytes->setText( QString( tr("Receive Bytes") ) );
 -     glStatus->addWidget( lbReceiveBytes, 2, 0, 1, 1 );
 -     leReceiveBytes = new QLabel( gbStatus );
 -     leReceiveBytes->setFrameStyle( QFrame::Panel|QFrame::Sunken );
 -     leReceiveBytes->setAlignment( Qt::AlignCenter );
 -     leReceiveBytes->setText( QString().setNum( rxlen ) );
 -     glStatus->addWidget( leReceiveBytes, 2, 1, 1, 1 );
 -     pbClearCnt = new QPushButton( gbStatus );
 -     pbClearCnt->setText( QString( tr("Clear Counter") ) );
 -     glStatus->addWidget( pbClearCnt, 3, 0, 1, 2 );
 -     glStatus->setAlignment( pbClearCnt, Qt::AlignCenter );
 -     glStatus->setRowStretch( 4, 10 );
 -     gbStatus->setLayout( glStatus );
 -     fmVLine = new QFrame( this );
 -     fmVLine->setFrameStyle( QFrame::VLine|QFrame::Sunken );
 -     glMain->addWidget( fmVLine, 0, 1, 3, 1 );
 -     vblTxRx = new QVBoxLayout;
 -     gbSendItem = new QGroupBox( this );
 -     gbSendItem->setTitle( QString( tr("Send Tips:") ) );
 -     vblTxRx->addWidget( gbSendItem );
 -     vblSend = new QVBoxLayout;
 -     hblSend1 = new QHBoxLayout;
 -     ckbAutoCR = new QCheckBox( gbSendItem );
 -     ckbAutoCR->setText( QString( tr("Auto CR") ) );
 -     hblSend1->addWidget( ckbAutoCR );
 -     ckbAutoSend = new QCheckBox( gbSendItem );
 -     ckbAutoSend->setText( QString( tr("Auto Send") ) );
 -     hblSend1->addWidget( ckbAutoSend );
 -     lbCycle = new QLabel( gbSendItem );
 -     lbCycle->setAlignment( Qt::AlignRight|Qt::AlignVCenter );
 -     lbCycle->setText( QString( tr("Send Cycle") ) );
 -     hblSend1->addWidget( lbCycle );
 -     spCycle = new QSpinBox( gbSendItem );
 -     spCycle->setMaximum( 100000 );
 -     spCycle->setMinimum( 10 );
 -     spCycle->setSuffix( QString( tr("ms") ) );
 -     spCycle->setSingleStep( 1 );
 -     spCycle->setEnabled( FALSE );
 -     hblSend1->addWidget( spCycle );
 -     vblSend->addLayout( hblSend1 );
 -     teSend = new QTextEdit( gbSendItem );
 -     vblSend->addWidget( teSend );
 -     hblSend2 = new QHBoxLayout;
 -     pbSendFile = new QPushButton( gbSendItem );
 -     pbSendFile->setText( QString( tr("Send File") ) );
 -     pbSendFile->setEnabled( FALSE );
 -     hblSend2->addWidget( pbSendFile );
 -     pbClearSend = new QPushButton( gbSendItem );
 -     pbClearSend->setText( QString( tr("Clear Send") ) );
 -     hblSend2->addWidget( pbClearSend );
 -     pbHandSend = new QPushButton( gbSendItem );
 -     pbHandSend->setText( QString( tr("Send") ) );
 -     pbHandSend->setEnabled( FALSE );
 -     hblSend2->addWidget( pbHandSend );
 -     vblSend->addLayout( hblSend2 );
 -     gbSendItem->setLayout( vblSend );
 -     gbReceiveItem = new QGroupBox( this );
 -     gbReceiveItem->setTitle(  QString( tr("Receive Tips:") ) );
 -     vblTxRx->addWidget( gbReceiveItem );
 -     vblReceive = new QVBoxLayout;
 -     
 -     teReceive = new QTextEdit( gbReceiveItem );
 -     vblReceive->addWidget( teReceive );
 -     hblReceive = new QHBoxLayout;
 -     ckbRcvHex = new QCheckBox( gbReceiveItem );
 -     ckbRcvHex->setText( QString( tr("Hex") ) );
 -     hblReceive->addWidget( ckbRcvHex );
 -     ckbAutoEnter = new QCheckBox( gbReceiveItem );
 -     ckbAutoEnter->setText( QString( tr("Auto Enter") ) );
 -     hblReceive->addWidget( ckbAutoEnter );
 -     pbClearRcv = new QPushButton( gbReceiveItem );
 -     pbClearRcv->setText( QString( tr("Clear Display") ) );
 -     hblReceive->addWidget( pbClearRcv );
 -     pbSaveRcv = new QPushButton( gbReceiveItem );
 -     pbSaveRcv->setText( QString( tr("Save Receive") ) );
 -     hblReceive->addWidget( pbSaveRcv );
 -     vblReceive->addLayout( hblReceive );
 -     gbReceiveItem->setLayout( vblReceive );
 -     glMain->addLayout( vblTxRx, 0, 2, 3, 3 );
 -     setLayout( glMain );
 -     
 -     cbPort->setCurrentIndex( 0 );
 -     cbBaud->setCurrentIndex( 8 );
 -     cbDataBit->setCurrentIndex( 3 );
 -     cbParity->setCurrentIndex( 0 );
 -     cbStopBit->setCurrentIndex( 0 );
 -     cbFlow->setCurrentIndex( 0 );
 -     port = new QextSerialPort( );
 -     port->setQueryMode( QextSerialPort::EventDriven );
 -     txCycle = spCycle->value();
 -     tmAutoTx = new QTimer( this );
 -     tmAutoTx->setSingleShot( TRUE );
 -     connect( pbOpen, SIGNAL( clicked() ), this, SLOT( slotOpenPort() ) );
 -     connect( cbPort, SIGNAL( activated(int) ), this, SLOT( slotPortChange(int) ) );
 -     connect( cbBaud, SIGNAL( activated(int) ), this, SLOT( slotBaudChange(int) ) );
 -     connect( cbDataBit, SIGNAL( activated(int) ), this, SLOT( slotDataBitChange(int) ) );
 -     connect( cbParity, SIGNAL( activated(int) ), this, SLOT( slotParityBitChange(int) ) );
 -     connect( cbStopBit, SIGNAL( activated(int) ), this, SLOT( slotStopBitChange(int) ) );
 -     connect( cbFlow, SIGNAL( activated(int) ), this, SLOT( slotFlowChange(int) ) );
 -     connect( pbHandSend, SIGNAL( clicked() ), this, SLOT( slotWrite() ) );
 -     connect( port, SIGNAL( readyRead() ), this, SLOT( slotRead() ) );
 -     connect( pbClearCnt, SIGNAL( clicked() ), this, SLOT( slotClearCnt() ) );
 -     connect( pbClearSend, SIGNAL( clicked() ), this, SLOT( slotClearTx() ) );
 -     connect( pbClearRcv, SIGNAL( clicked() ), this, SLOT( slotClearRcv() ) );
 -     connect( ckbAutoSend, SIGNAL( stateChanged(int) ), this, SLOT( slotAutoTx(int) ) );
 -     connect( spCycle, SIGNAL( valueChanged(int) ), this, SLOT( slotCycleChange(int) ) );
 -     connect( tmAutoTx, SIGNAL( timeout() ), this, SLOT( slotTimerAutoTx() ) );
 -     connect( pbSendFile, SIGNAL( clicked() ), this, SLOT( slotTxFile() ) );
 - }
 - QSerialTool::~QSerialTool()
 - {
 -     ;
 - }
 - void QSerialTool::slotOpenPort()
 - {
 -     if ( !bOpen )
 -     {
 -         if ( port->isOpen() )
 -         {
 -             port->close();
 -         }
 -         bOpen = port->open(    QIODevice::ReadWrite );
 -         port->setPortName( cbPort->currentText() );
 -         port->setBaudRate( getBaudRate() );
 -         port->setDataBits( (DataBitsType)cbDataBit->currentIndex() );
 -         port->setParity( (ParityType)cbParity->currentIndex() );
 -         port->setStopBits( (StopBitsType)cbStopBit->currentIndex() );
 -         port->setTimeout( 1000 );
 -         if ( !bOpen )
 -         {
 -             QMessageBox::critical(    this,
 -                 QString( tr("Open %1 failed") ).arg( port->portName() ),
 -                 QString( tr("Can not open %1 failed!") ).arg( port->portName() ) );
 -             return;
 -         }
 -         leSerialStatus->setText( QString( tr("Opened") ) );
 -         pbOpen->setText( QString( tr("Close") ) );
 -         pbHandSend->setEnabled( TRUE );
 -         ckbAutoCR->setEnabled( TRUE );
 -         pbSendFile->setEnabled( TRUE );        
 -     }
 -     else
 -     {
 -         port->close();
 -         bOpen = FALSE;
 -         leSerialStatus->setText( QString( tr("Closed") ) );
 -         pbOpen->setText( QString( tr("Open") ) );
 -         pbHandSend->setEnabled( FALSE );
 -         ckbAutoCR->setEnabled( FALSE );
 -         pbSendFile->setEnabled( FALSE );
 -         spCycle->setEnabled( FALSE );
 -     }
 - }
 - void QSerialTool::slotPortChange( int id )
 - {
 -     port->setPortName( cbPort->itemText( id ) );
 - }
 - void QSerialTool::slotBaudChange( int /*id*/ )
 - {
 -     port->setBaudRate( getBaudRate() );
 - }
 - void QSerialTool::slotDataBitChange( int id )
 - {
 -     port->setDataBits( (DataBitsType)id );
 - }
 - void QSerialTool::slotParityBitChange( int id )
 - {
 -     port->setParity( (ParityType)id );
 - }
 - void QSerialTool::slotStopBitChange( int id )
 - {
 -     port->setStopBits( (StopBitsType)id );
 - }
 - void QSerialTool::slotFlowChange( int id )
 - {
 -     port->setFlowControl( (FlowType)id );
 - }
 - void QSerialTool::slotWrite()
 - {
 -     if ( !port->isOpen() )
 -     {
 -         return;
 -     }
 -     QString strWrite = teSend->toPlainText();
 -     if ( ckbAutoCR->isChecked() )
 -     {
 -         strWrite.append( "\x0D" );
 -     }
 -     else
 -     {
 -         if ( strWrite.isNull() )
 -         {
 -             return;
 -         }
 -     }
 -     port->write( strWrite.toAscii().constData(), strWrite.length() );
 -     txlen += strWrite.length();
 -     leSendBytes->setText( QString().setNum( txlen ) );
 - }
 - void QSerialTool::slotRead()
 - {
 -     char buff[1024];
 -     int readlen = port->read( buff, 1024 );
 -     buff[readlen] = '\0';
 -     teReceive->append( QString().fromAscii( buff ) );
 -     rxlen += readlen;
 -     leReceiveBytes->setText( QString().setNum( rxlen ) );
 - }
 - void QSerialTool::slotClearTx()
 - {
 -     teSend->setText( QString("") );
 - }
 - void QSerialTool::slotClearRcv()
 - {
 -     teReceive->setText( QString("") );
 - }
 - void QSerialTool::slotClearCnt()
 - {
 -     rxlen = 0;
 -     txlen = 0;
 -     leReceiveBytes->setText( QString().setNum( rxlen ) );
 -     leSendBytes->setText( QString().setNum( txlen ) );
 - }
 - void QSerialTool::slotAutoTx( int state )
 - {
 -     if ( state )
 -     {
 -         bAutoTx = TRUE;
 -         pbHandSend->setEnabled( FALSE );
 -         pbSendFile->setEnabled( FALSE );
 -         spCycle->setEnabled( TRUE );
 -         tmAutoTx->start( txCycle );
 -     }
 -     else
 -     {
 -         bAutoTx = FALSE;
 -         pbHandSend->setEnabled( TRUE );
 -         pbSendFile->setEnabled( TRUE );
 -         spCycle->setEnabled( FALSE );
 -     }
 - }
 - void QSerialTool::slotCycleChange( int id )
 - {
 -     txCycle = id;
 - }
 - BaudRateType QSerialTool::getBaudRate()
 - {
 -     BaudRateType baud;
 -     switch ( cbBaud->currentIndex() )
 -     {
 -     case 0:
 -         baud = BAUD300;
 -         break;
 -     case 1:
 -         baud = BAUD600;
 -         break;
 -     case 2: 
 -         baud = BAUD1200;
 -         break;
 -     case 3:
 -         baud = BAUD2400;
 -         break;
 -     case 4:
 -         baud = BAUD4800;
 -         break;
 -     case 5:
 -         baud = BAUD9600;
 -         break;
 -     case 6:
 -         baud = BAUD19200;
 -         break;
 -     case 7:
 -         baud = BAUD38400;
 -         break;
 -     case 8:
 -         baud = BAUD57600;
 -         break;
 -     case 9:
 -         baud = BAUD115200;
 -         break;
 -     default:
 -         baud = BAUD56000;
 -         cbBaud->setCurrentIndex( 8 );
 -         break;
 -     }
 -     
 -     return baud;
 - }
 - void QSerialTool::slotTimerAutoTx()
 - {
 -     slotWrite();
 -     if ( bAutoTx )
 -     {
 -         tmAutoTx->start( txCycle );
 -     }
 - }
 - void QSerialTool::slotTxFile()
 - {
 -     pbHandSend->setEnabled( FALSE );
 -     ckbAutoSend->setEnabled( FALSE );
 -     ckbAutoCR->setEnabled( FALSE );
 -     spCycle->setEnabled( FALSE );
 -     
 -     QString strFileName;
 -     
 -     strFileName = QFileDialog::getOpenFileName( this,
 -         QString( tr("Please select the file to send") ),
 -         QString( "./" ), QString( "*.*" ) );
 -     if ( strFileName.isNull() )
 -     {
 -         pbHandSend->setEnabled( TRUE );
 -         ckbAutoSend->setEnabled( TRUE );
 -         ckbAutoCR->setEnabled( TRUE );
 -         spCycle->setEnabled( TRUE );
 -         return;
 -     }
 -     QFile* fileTx = new QFile( this );
 -     fileTx->setFileName( strFileName );
 -     if( !fileTx->open( QIODevice::ReadOnly ) )
 -     {
 -         QMessageBox::critical( this, QString( tr("Open file failed") ),
 -             QString( tr("Cannot open %1.") ).arg( strFileName ) );
 -         delete fileTx;
 -         pbHandSend->setEnabled( TRUE );
 -         ckbAutoSend->setEnabled( TRUE );
 -         ckbAutoCR->setEnabled( TRUE );
 -         spCycle->setEnabled( TRUE );
 -         return;
 -     }
 -     QString strTx;
 -     QTextStream tsfile( fileTx );
 -     while ( !tsfile.atEnd() )
 -     {
 -         strTx = tsfile.readLine();
 -         port->write( strTx.toAscii().constData() );
 -         txlen += strTx.length();
 -         leSendBytes->setText( QString().setNum( txlen ) );
 -     }
 -     delete fileTx;
 -     pbHandSend->setEnabled( TRUE );
 -     ckbAutoSend->setEnabled( TRUE );
 -     ckbAutoCR->setEnabled( TRUE );
 -     spCycle->setEnabled( TRUE );
 - }
 
  
 
 
 |