• 7814阅读
  • 3回复

请问谁有QextSerialPort写的串口传送的例子?谢谢 [复制链接]

上一主题 下一主题
离线crash3
 

只看楼主 正序阅读 楼主  发表于: 2008-12-02
— 本帖被 XChinux 执行加亮操作(2009-01-06) —
请问谁有QextSerialPort写的串口传送的例子?谢谢
离线crash3

只看该作者 3楼 发表于: 2008-12-05
谢谢了
离线htyoung

只看该作者 2楼 发表于: 2008-12-03
串口调试助手(QT 4.4.3 + QextSerialPort 1.2)
http://www.qtcn.org/bbs/read.php?tid=13893
它不输给任何一个商业软件。
***
QT5
***
离线guoyun_he

只看该作者 1楼 发表于: 2008-12-03
在打开串口口,直接调用write函数。给你发一个我写的简单的例子吧!
  1. #ifndef __Q_SERIAL_TOOL_H__
  2. #define __Q_SERIAL_TOOL_H__
  3. #include <QtGui/QWidget>
  4. #include "qextserialport.h"
  5. QT_FORWARD_DECLARE_CLASS( QGroupBox )
  6. QT_FORWARD_DECLARE_CLASS( QLabel )
  7. QT_FORWARD_DECLARE_CLASS( QComboBox )
  8. QT_FORWARD_DECLARE_CLASS( QPushButton )
  9. QT_FORWARD_DECLARE_CLASS( QGridLayout )
  10. QT_FORWARD_DECLARE_CLASS( QVBoxLayout )
  11. QT_FORWARD_DECLARE_CLASS( QHBoxLayout )
  12. QT_FORWARD_DECLARE_CLASS( QFrame )
  13. QT_FORWARD_DECLARE_CLASS( QTextEdit )
  14. QT_FORWARD_DECLARE_CLASS( QCheckBox )
  15. QT_FORWARD_DECLARE_CLASS( QSpinBox )
  16. QT_FORWARD_DECLARE_CLASS( QTimer );
  17. class QSerialTool : public QWidget
  18. {
  19.     Q_OBJECT
  20. public:
  21.     QSerialTool( QWidget* parent = 0 );
  22.     ~QSerialTool();
  23. private:
  24.     BaudRateType getBaudRate();
  25. private slots:
  26.     void slotOpenPort();
  27.     void slotPortChange( int id );
  28.     void slotBaudChange( int id );
  29.     void slotDataBitChange( int id );
  30.     void slotParityBitChange( int id );
  31.     void slotStopBitChange( int id );
  32.     void slotFlowChange( int id );
  33.     void slotWrite();
  34.     void slotRead();
  35.     void slotClearCnt();
  36.     void slotClearTx();
  37.     void slotClearRcv();
  38.     void slotAutoTx( int state );
  39.     void slotCycleChange( int id );
  40.     void slotTimerAutoTx();
  41.     void slotTxFile();
  42. protected:
  43.     QGridLayout* glMain;
  44.     QGridLayout* glPortPara;
  45.     QGridLayout* glStatus;
  46.     QVBoxLayout* vblTxRx;
  47.     QVBoxLayout* vblSend;
  48.     QHBoxLayout* hblSend1;
  49.     QHBoxLayout* hblSend2;
  50.     QVBoxLayout* vblReceive;
  51.     QHBoxLayout* hblReceive;
  52. private:
  53.     QextSerialPort* port;
  54.     QTimer* tmAutoTx;
  55.     bool bOpen;
  56.     bool bAutoTx;
  57.     unsigned long rxlen;
  58.     unsigned long txlen;
  59.     int txCycle;
  60.     QGroupBox* gbPortPara;
  61.     QLabel* lbPort;
  62.     QComboBox* cbPort;
  63.     QLabel* lbBaud;
  64.     QComboBox* cbBaud;
  65.     QLabel* lbDataBit;
  66.     QComboBox* cbDataBit;
  67.     QLabel* lbParity;
  68.     QComboBox* cbParity;
  69.     QLabel* lbStopBit;
  70.     QComboBox* cbStopBit;
  71.     QLabel* lbFlow;
  72.     QComboBox* cbFlow;
  73.     QPushButton* pbOpen;
  74.     QGroupBox* gbStatus;
  75.     QLabel* lbSerialStatus;
  76.     QLabel* leSerialStatus;
  77.     QLabel* lbSendBytes;
  78.     QLabel* leSendBytes;
  79.     QLabel* lbReceiveBytes;
  80.     QLabel* leReceiveBytes;
  81.     QPushButton* pbClearCnt;
  82.     QFrame* fmVLine;
  83.     QGroupBox* gbSendItem;
  84.     QCheckBox* ckbAutoSend;
  85.     QLabel* lbCycle;
  86.     QSpinBox* spCycle;
  87.     QTextEdit* teSend;
  88.     QCheckBox* ckbAutoCR;
  89.     QPushButton* pbSendFile;
  90.     QPushButton* pbClearSend;
  91.     QPushButton* pbHandSend;
  92.     QGroupBox*  gbReceiveItem;
  93.     QTextEdit* teReceive;
  94.     QCheckBox* ckbRcvHex;
  95.     QCheckBox* ckbAutoEnter;
  96.     QPushButton* pbClearRcv;
  97.     QPushButton* pbSaveRcv;
  98. };
  99. #endif


  1. #include "qserialtool.h"
  2. #include <QtGui/QGroupBox>
  3. #include <QtGui/QGridLayout>
  4. #include <QtGui/QHBoxLayout>
  5. #include <QtGui/QVBoxLayout>
  6. #include <QtGui/QLabel>
  7. #include <QtGui/QComboBox>
  8. #include <QtGui/QPushButton>
  9. #include <QtGui/QFrame>
  10. #include <QtGui/QTextEdit>
  11. #include <QtGui/QCheckBox>
  12. #include <QtGui/QSpinBox>
  13. #include <QtGui/QMessageBox>
  14. #include <QTextStream>
  15. #include <QtGui/QFileDialog>
  16. #include <QFile>
  17. #include <QTimer>
  18. QSerialTool::QSerialTool( QWidget* parent )
  19. : QWidget( parent ), rxlen( 0 ), txlen( 0 ), bOpen( FALSE ),
  20. bAutoTx( FALSE )
  21. {
  22.     glMain = new QGridLayout;
  23.     gbPortPara = new QGroupBox( this );
  24.     gbPortPara->setTitle( QString( tr("Serial Config") ) );
  25.     glPortPara = new QGridLayout;
  26.     lbPort = new QLabel( gbPortPara );
  27.     lbPort->setText( QString( tr("Serial") ) );
  28.     glPortPara->addWidget( lbPort, 0, 0, 1, 1 );
  29.     cbPort = new QComboBox( gbPortPara );
  30.     QStringList strlistPort;
  31.     strlistPort << "COM1" << "COM2" << "COM3" << "COM4";
  32.     cbPort->addItems( strlistPort );
  33.     glPortPara->addWidget( cbPort, 0, 1, 1, 1 );
  34.     lbBaud = new QLabel( gbPortPara );
  35.     lbBaud->setText( QString( tr("Baud") ) );
  36.     glPortPara->addWidget( lbBaud, 1, 0, 1, 1 );
  37.     cbBaud = new QComboBox( gbPortPara );
  38.     QStringList strlistBaud;
  39.     strlistBaud << "300" << "600" << "1200" << "2400" << "4800"
  40.         << "9600" << "19200" << "38400" << "57600" << "115200";
  41.     cbBaud->addItems( strlistBaud );
  42.     glPortPara->addWidget( cbBaud, 1, 1, 1, 1 );
  43.     lbDataBit = new QLabel( this );
  44.     lbDataBit->setText( QString( tr("DataBit") ) );
  45.     glPortPara->addWidget( lbDataBit, 2, 0, 1, 1 );
  46.     cbDataBit = new QComboBox( gbPortPara );
  47.     QStringList strlistDataBit;
  48.     strlistDataBit << "5" << "6" << "7" << "8";
  49.     cbDataBit->addItems( strlistDataBit );
  50.     glPortPara->addWidget( cbDataBit, 2, 1, 1, 1 );
  51.     lbParity = new QLabel( gbPortPara );
  52.     lbParity->setText( QString( tr("Parity") ) );
  53.     glPortPara->addWidget( lbParity, 3, 0, 1, 1 );
  54.     cbParity = new QComboBox( gbPortPara );
  55.     QStringList strlistParity;
  56.     strlistParity
  57.         << QString( tr("None") )
  58.         << QString( tr("Odd") )
  59.         << QString( tr("Even") )
  60.         << QString( tr("Mark") )
  61.         << QString( tr("Space") );
  62.     cbParity->addItems( strlistParity );
  63.     glPortPara->addWidget( cbParity, 3, 1, 1, 1 );
  64.     lbStopBit = new QLabel( gbPortPara );
  65.     lbStopBit->setText( QString( tr("StopBit") ) );
  66.     glPortPara->addWidget( lbStopBit, 4, 0, 1, 1 );
  67.     cbStopBit = new QComboBox( gbPortPara );
  68.     cbStopBit->addItem( QString("1") );
  69.     cbStopBit->addItem( QString("1.5") );
  70.     cbStopBit->addItem( QString("2") );
  71.     glPortPara->addWidget( cbStopBit, 4, 1, 1, 1 );
  72.    
  73.     lbFlow = new QLabel( gbPortPara );
  74.     lbFlow->setText( QString( tr("Flow Control") ) );
  75.     glPortPara->addWidget( lbFlow, 5, 0, 1, 1 );
  76.     cbFlow = new QComboBox( gbPortPara );
  77.     QStringList strlistFlow;
  78.     strlistFlow
  79.         << QString( tr("Off") )
  80.         << QString( tr("Hardware") )
  81.         << QString( tr("Xon/Xoff") );
  82.     cbFlow->addItems( strlistFlow );
  83.    
  84.     glPortPara->addWidget( cbFlow, 5, 1, 1, 1 );
  85.     gbPortPara->setLayout( glPortPara );
  86.     glMain->addWidget( gbPortPara, 0, 0, 1, 1 );
  87.     pbOpen = new QPushButton( this );
  88.     pbOpen->setText( QString( tr("Open") ) );
  89.     glMain->addWidget( pbOpen, 1, 0, 1, 1 );
  90.     glMain->setAlignment( pbOpen, Qt::AlignCenter );
  91.    
  92.     gbStatus = new QGroupBox( this );
  93.     gbStatus->setTitle( QString( tr("Status") ) );
  94.     glMain->addWidget( gbStatus, 2, 0, 1, 1 );
  95.     glStatus = new QGridLayout;
  96.     lbSerialStatus = new QLabel( gbStatus );
  97.     lbSerialStatus->setText( QString( tr("Serial Status:") ) );
  98.     glStatus->addWidget( lbSerialStatus, 0, 0, 1, 1 );
  99.     leSerialStatus = new QLabel( gbStatus );
  100.     leSerialStatus->setFrameStyle( QFrame::Panel|QFrame::Sunken );
  101.     leSerialStatus->setAlignment( Qt::AlignCenter );
  102.     leSerialStatus->setText( QString( tr("Closed") ) );
  103.     glStatus->addWidget( leSerialStatus, 0, 1, 1, 1 );
  104.     lbSendBytes = new QLabel( gbStatus );
  105.     lbSendBytes->setText( QString( tr("Send Bytes:") ) );
  106.     glStatus->addWidget( lbSendBytes, 1, 0, 1, 1 );
  107.     leSendBytes = new QLabel( gbStatus );
  108.     leSendBytes->setFrameStyle( QFrame::Panel|QFrame::Sunken );
  109.     leSendBytes->setAlignment( Qt::AlignCenter );
  110.     leSendBytes->setText( QString().setNum( txlen ) );
  111.     glStatus->addWidget( leSendBytes, 1, 1, 1, 1 );
  112.     lbReceiveBytes = new QLabel( gbStatus );
  113.     lbReceiveBytes->setText( QString( tr("Receive Bytes") ) );
  114.     glStatus->addWidget( lbReceiveBytes, 2, 0, 1, 1 );
  115.     leReceiveBytes = new QLabel( gbStatus );
  116.     leReceiveBytes->setFrameStyle( QFrame::Panel|QFrame::Sunken );
  117.     leReceiveBytes->setAlignment( Qt::AlignCenter );
  118.     leReceiveBytes->setText( QString().setNum( rxlen ) );
  119.     glStatus->addWidget( leReceiveBytes, 2, 1, 1, 1 );
  120.     pbClearCnt = new QPushButton( gbStatus );
  121.     pbClearCnt->setText( QString( tr("Clear Counter") ) );
  122.     glStatus->addWidget( pbClearCnt, 3, 0, 1, 2 );
  123.     glStatus->setAlignment( pbClearCnt, Qt::AlignCenter );
  124.     glStatus->setRowStretch( 4, 10 );
  125.     gbStatus->setLayout( glStatus );
  126.     fmVLine = new QFrame( this );
  127.     fmVLine->setFrameStyle( QFrame::VLine|QFrame::Sunken );
  128.     glMain->addWidget( fmVLine, 0, 1, 3, 1 );
  129.     vblTxRx = new QVBoxLayout;
  130.     gbSendItem = new QGroupBox( this );
  131.     gbSendItem->setTitle( QString( tr("Send Tips:") ) );
  132.     vblTxRx->addWidget( gbSendItem );
  133.     vblSend = new QVBoxLayout;
  134.     hblSend1 = new QHBoxLayout;
  135.     ckbAutoCR = new QCheckBox( gbSendItem );
  136.     ckbAutoCR->setText( QString( tr("Auto CR") ) );
  137.     hblSend1->addWidget( ckbAutoCR );
  138.     ckbAutoSend = new QCheckBox( gbSendItem );
  139.     ckbAutoSend->setText( QString( tr("Auto Send") ) );
  140.     hblSend1->addWidget( ckbAutoSend );
  141.     lbCycle = new QLabel( gbSendItem );
  142.     lbCycle->setAlignment( Qt::AlignRight|Qt::AlignVCenter );
  143.     lbCycle->setText( QString( tr("Send Cycle") ) );
  144.     hblSend1->addWidget( lbCycle );
  145.     spCycle = new QSpinBox( gbSendItem );
  146.     spCycle->setMaximum( 100000 );
  147.     spCycle->setMinimum( 10 );
  148.     spCycle->setSuffix( QString( tr("ms") ) );
  149.     spCycle->setSingleStep( 1 );
  150.     spCycle->setEnabled( FALSE );
  151.     hblSend1->addWidget( spCycle );
  152.     vblSend->addLayout( hblSend1 );
  153.     teSend = new QTextEdit( gbSendItem );
  154.     vblSend->addWidget( teSend );
  155.     hblSend2 = new QHBoxLayout;
  156.     pbSendFile = new QPushButton( gbSendItem );
  157.     pbSendFile->setText( QString( tr("Send File") ) );
  158.     pbSendFile->setEnabled( FALSE );
  159.     hblSend2->addWidget( pbSendFile );
  160.     pbClearSend = new QPushButton( gbSendItem );
  161.     pbClearSend->setText( QString( tr("Clear Send") ) );
  162.     hblSend2->addWidget( pbClearSend );
  163.     pbHandSend = new QPushButton( gbSendItem );
  164.     pbHandSend->setText( QString( tr("Send") ) );
  165.     pbHandSend->setEnabled( FALSE );
  166.     hblSend2->addWidget( pbHandSend );
  167.     vblSend->addLayout( hblSend2 );
  168.     gbSendItem->setLayout( vblSend );
  169.     gbReceiveItem = new QGroupBox( this );
  170.     gbReceiveItem->setTitle(  QString( tr("Receive Tips:") ) );
  171.     vblTxRx->addWidget( gbReceiveItem );
  172.     vblReceive = new QVBoxLayout;
  173.    
  174.     teReceive = new QTextEdit( gbReceiveItem );
  175.     vblReceive->addWidget( teReceive );
  176.     hblReceive = new QHBoxLayout;
  177.     ckbRcvHex = new QCheckBox( gbReceiveItem );
  178.     ckbRcvHex->setText( QString( tr("Hex") ) );
  179.     hblReceive->addWidget( ckbRcvHex );
  180.     ckbAutoEnter = new QCheckBox( gbReceiveItem );
  181.     ckbAutoEnter->setText( QString( tr("Auto Enter") ) );
  182.     hblReceive->addWidget( ckbAutoEnter );
  183.     pbClearRcv = new QPushButton( gbReceiveItem );
  184.     pbClearRcv->setText( QString( tr("Clear Display") ) );
  185.     hblReceive->addWidget( pbClearRcv );
  186.     pbSaveRcv = new QPushButton( gbReceiveItem );
  187.     pbSaveRcv->setText( QString( tr("Save Receive") ) );
  188.     hblReceive->addWidget( pbSaveRcv );
  189.     vblReceive->addLayout( hblReceive );
  190.     gbReceiveItem->setLayout( vblReceive );
  191.     glMain->addLayout( vblTxRx, 0, 2, 3, 3 );
  192.     setLayout( glMain );
  193.    
  194.     cbPort->setCurrentIndex( 0 );
  195.     cbBaud->setCurrentIndex( 8 );
  196.     cbDataBit->setCurrentIndex( 3 );
  197.     cbParity->setCurrentIndex( 0 );
  198.     cbStopBit->setCurrentIndex( 0 );
  199.     cbFlow->setCurrentIndex( 0 );
  200.     port = new QextSerialPort( );
  201.     port->setQueryMode( QextSerialPort::EventDriven );
  202.     txCycle = spCycle->value();
  203.     tmAutoTx = new QTimer( this );
  204.     tmAutoTx->setSingleShot( TRUE );
  205.     connect( pbOpen, SIGNAL( clicked() ), this, SLOT( slotOpenPort() ) );
  206.     connect( cbPort, SIGNAL( activated(int) ), this, SLOT( slotPortChange(int) ) );
  207.     connect( cbBaud, SIGNAL( activated(int) ), this, SLOT( slotBaudChange(int) ) );
  208.     connect( cbDataBit, SIGNAL( activated(int) ), this, SLOT( slotDataBitChange(int) ) );
  209.     connect( cbParity, SIGNAL( activated(int) ), this, SLOT( slotParityBitChange(int) ) );
  210.     connect( cbStopBit, SIGNAL( activated(int) ), this, SLOT( slotStopBitChange(int) ) );
  211.     connect( cbFlow, SIGNAL( activated(int) ), this, SLOT( slotFlowChange(int) ) );
  212.     connect( pbHandSend, SIGNAL( clicked() ), this, SLOT( slotWrite() ) );
  213.     connect( port, SIGNAL( readyRead() ), this, SLOT( slotRead() ) );
  214.     connect( pbClearCnt, SIGNAL( clicked() ), this, SLOT( slotClearCnt() ) );
  215.     connect( pbClearSend, SIGNAL( clicked() ), this, SLOT( slotClearTx() ) );
  216.     connect( pbClearRcv, SIGNAL( clicked() ), this, SLOT( slotClearRcv() ) );
  217.     connect( ckbAutoSend, SIGNAL( stateChanged(int) ), this, SLOT( slotAutoTx(int) ) );
  218.     connect( spCycle, SIGNAL( valueChanged(int) ), this, SLOT( slotCycleChange(int) ) );
  219.     connect( tmAutoTx, SIGNAL( timeout() ), this, SLOT( slotTimerAutoTx() ) );
  220.     connect( pbSendFile, SIGNAL( clicked() ), this, SLOT( slotTxFile() ) );
  221. }
  222. QSerialTool::~QSerialTool()
  223. {
  224.     ;
  225. }
  226. void QSerialTool::slotOpenPort()
  227. {
  228.     if ( !bOpen )
  229.     {
  230.         if ( port->isOpen() )
  231.         {
  232.             port->close();
  233.         }
  234.         bOpen = port->open(    QIODevice::ReadWrite );
  235.         port->setPortName( cbPort->currentText() );
  236.         port->setBaudRate( getBaudRate() );
  237.         port->setDataBits( (DataBitsType)cbDataBit->currentIndex() );
  238.         port->setParity( (ParityType)cbParity->currentIndex() );
  239.         port->setStopBits( (StopBitsType)cbStopBit->currentIndex() );
  240.         port->setTimeout( 1000 );
  241.         if ( !bOpen )
  242.         {
  243.             QMessageBox::critical(    this,
  244.                 QString( tr("Open %1 failed") ).arg( port->portName() ),
  245.                 QString( tr("Can not open %1 failed!") ).arg( port->portName() ) );
  246.             return;
  247.         }
  248.         leSerialStatus->setText( QString( tr("Opened") ) );
  249.         pbOpen->setText( QString( tr("Close") ) );
  250.         pbHandSend->setEnabled( TRUE );
  251.         ckbAutoCR->setEnabled( TRUE );
  252.         pbSendFile->setEnabled( TRUE );       
  253.     }
  254.     else
  255.     {
  256.         port->close();
  257.         bOpen = FALSE;
  258.         leSerialStatus->setText( QString( tr("Closed") ) );
  259.         pbOpen->setText( QString( tr("Open") ) );
  260.         pbHandSend->setEnabled( FALSE );
  261.         ckbAutoCR->setEnabled( FALSE );
  262.         pbSendFile->setEnabled( FALSE );
  263.         spCycle->setEnabled( FALSE );
  264.     }
  265. }
  266. void QSerialTool::slotPortChange( int id )
  267. {
  268.     port->setPortName( cbPort->itemText( id ) );
  269. }
  270. void QSerialTool::slotBaudChange( int /*id*/ )
  271. {
  272.     port->setBaudRate( getBaudRate() );
  273. }
  274. void QSerialTool::slotDataBitChange( int id )
  275. {
  276.     port->setDataBits( (DataBitsType)id );
  277. }
  278. void QSerialTool::slotParityBitChange( int id )
  279. {
  280.     port->setParity( (ParityType)id );
  281. }
  282. void QSerialTool::slotStopBitChange( int id )
  283. {
  284.     port->setStopBits( (StopBitsType)id );
  285. }
  286. void QSerialTool::slotFlowChange( int id )
  287. {
  288.     port->setFlowControl( (FlowType)id );
  289. }
  290. void QSerialTool::slotWrite()
  291. {
  292.     if ( !port->isOpen() )
  293.     {
  294.         return;
  295.     }
  296.     QString strWrite = teSend->toPlainText();
  297.     if ( ckbAutoCR->isChecked() )
  298.     {
  299.         strWrite.append( "\x0D" );
  300.     }
  301.     else
  302.     {
  303.         if ( strWrite.isNull() )
  304.         {
  305.             return;
  306.         }
  307.     }
  308.     port->write( strWrite.toAscii().constData(), strWrite.length() );
  309.     txlen += strWrite.length();
  310.     leSendBytes->setText( QString().setNum( txlen ) );
  311. }
  312. void QSerialTool::slotRead()
  313. {
  314.     char buff[1024];
  315.     int readlen = port->read( buff, 1024 );
  316.     buff[readlen] = '\0';
  317.     teReceive->append( QString().fromAscii( buff ) );
  318.     rxlen += readlen;
  319.     leReceiveBytes->setText( QString().setNum( rxlen ) );
  320. }
  321. void QSerialTool::slotClearTx()
  322. {
  323.     teSend->setText( QString("") );
  324. }
  325. void QSerialTool::slotClearRcv()
  326. {
  327.     teReceive->setText( QString("") );
  328. }
  329. void QSerialTool::slotClearCnt()
  330. {
  331.     rxlen = 0;
  332.     txlen = 0;
  333.     leReceiveBytes->setText( QString().setNum( rxlen ) );
  334.     leSendBytes->setText( QString().setNum( txlen ) );
  335. }
  336. void QSerialTool::slotAutoTx( int state )
  337. {
  338.     if ( state )
  339.     {
  340.         bAutoTx = TRUE;
  341.         pbHandSend->setEnabled( FALSE );
  342.         pbSendFile->setEnabled( FALSE );
  343.         spCycle->setEnabled( TRUE );
  344.         tmAutoTx->start( txCycle );
  345.     }
  346.     else
  347.     {
  348.         bAutoTx = FALSE;
  349.         pbHandSend->setEnabled( TRUE );
  350.         pbSendFile->setEnabled( TRUE );
  351.         spCycle->setEnabled( FALSE );
  352.     }
  353. }
  354. void QSerialTool::slotCycleChange( int id )
  355. {
  356.     txCycle = id;
  357. }
  358. BaudRateType QSerialTool::getBaudRate()
  359. {
  360.     BaudRateType baud;
  361.     switch ( cbBaud->currentIndex() )
  362.     {
  363.     case 0:
  364.         baud = BAUD300;
  365.         break;
  366.     case 1:
  367.         baud = BAUD600;
  368.         break;
  369.     case 2:
  370.         baud = BAUD1200;
  371.         break;
  372.     case 3:
  373.         baud = BAUD2400;
  374.         break;
  375.     case 4:
  376.         baud = BAUD4800;
  377.         break;
  378.     case 5:
  379.         baud = BAUD9600;
  380.         break;
  381.     case 6:
  382.         baud = BAUD19200;
  383.         break;
  384.     case 7:
  385.         baud = BAUD38400;
  386.         break;
  387.     case 8:
  388.         baud = BAUD57600;
  389.         break;
  390.     case 9:
  391.         baud = BAUD115200;
  392.         break;
  393.     default:
  394.         baud = BAUD56000;
  395.         cbBaud->setCurrentIndex( 8 );
  396.         break;
  397.     }
  398.    
  399.     return baud;
  400. }
  401. void QSerialTool::slotTimerAutoTx()
  402. {
  403.     slotWrite();
  404.     if ( bAutoTx )
  405.     {
  406.         tmAutoTx->start( txCycle );
  407.     }
  408. }
  409. void QSerialTool::slotTxFile()
  410. {
  411.     pbHandSend->setEnabled( FALSE );
  412.     ckbAutoSend->setEnabled( FALSE );
  413.     ckbAutoCR->setEnabled( FALSE );
  414.     spCycle->setEnabled( FALSE );
  415.    
  416.     QString strFileName;
  417.    
  418.     strFileName = QFileDialog::getOpenFileName( this,
  419.         QString( tr("Please select the file to send") ),
  420.         QString( "./" ), QString( "*.*" ) );
  421.     if ( strFileName.isNull() )
  422.     {
  423.         pbHandSend->setEnabled( TRUE );
  424.         ckbAutoSend->setEnabled( TRUE );
  425.         ckbAutoCR->setEnabled( TRUE );
  426.         spCycle->setEnabled( TRUE );
  427.         return;
  428.     }
  429.     QFile* fileTx = new QFile( this );
  430.     fileTx->setFileName( strFileName );
  431.     if( !fileTx->open( QIODevice::ReadOnly ) )
  432.     {
  433.         QMessageBox::critical( this, QString( tr("Open file failed") ),
  434.             QString( tr("Cannot open %1.") ).arg( strFileName ) );
  435.         delete fileTx;
  436.         pbHandSend->setEnabled( TRUE );
  437.         ckbAutoSend->setEnabled( TRUE );
  438.         ckbAutoCR->setEnabled( TRUE );
  439.         spCycle->setEnabled( TRUE );
  440.         return;
  441.     }
  442.     QString strTx;
  443.     QTextStream tsfile( fileTx );
  444.     while ( !tsfile.atEnd() )
  445.     {
  446.         strTx = tsfile.readLine();
  447.         port->write( strTx.toAscii().constData() );
  448.         txlen += strTx.length();
  449.         leSendBytes->setText( QString().setNum( txlen ) );
  450.     }
  451.     delete fileTx;
  452.     pbHandSend->setEnabled( TRUE );
  453.     ckbAutoSend->setEnabled( TRUE );
  454.     ckbAutoCR->setEnabled( TRUE );
  455.     spCycle->setEnabled( TRUE );
  456. }
快速回复
限100 字节
 
上一个 下一个