|
修改的代码如下:
commit c4b8f9bf159f4c2e788cb9d47555dd02aff346c4
Author: ******* <pengclpsz@gmail.com>
Date: Wed Feb 4 14:24:52 2015 +0800
set serial port to available one
diff --git a/mainwindow.cpp b/mainwindow.cpp
index eb3d34d..5a18db8 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -45,6 +45,7 @@ MainWindow::MainWindow(QWidget *parent) :
#endif
+ try_set_active_port();
ui->statusBar->showMessage(tr("欢迎使用QCom串口调试助手!"));
}
@@ -71,6 +72,94 @@ void MainWindow::changeEvent(QEvent *e)
}
}
+bool MainWindow::try_open(QextSerialPort *com)
+{
+ bool res = false;
+
+
+ connect(com, SIGNAL(readyRead()), this, SLOT(readMyCom()));
+
+ //设置波特率
+ com->setBaudRate((BaudRateType)ui->baudRateComboBox->currentText().toInt());
+ //com->setBaudRate((BaudRateType)115200);
+
+ //设置数据位
+ com->setDataBits((DataBitsType)ui->dataBitsComboBox->currentText().toInt());
+
+ //设置校验
+ switch(ui->parityComboBox->currentIndex()){
+ case 0:
+ com->setParity(PAR_NONE);
+ break;
+ case 1:
+ com->setParity(PAR_ODD);
+ break;
+ case 2:
+ com->setParity(PAR_EVEN);
+ break;
+ default:
+ com->setParity(PAR_NONE);
+ qDebug("set to default : PAR_NONE");
+ break;
+ }
+
+ //设置停止位
+ switch(ui->stopBitsComboBox->currentIndex()){
+ case 0:
+ com->setStopBits(STOP_1);
+ break;
+ case 1:
+ #ifdef Q_OS_WIN
+ com->setStopBits(STOP_1_5);
+ #endif
+ break;
+ case 2:
+ com->setStopBits(STOP_2);
+ break;
+ default:
+ com->setStopBits(STOP_1);
+ qDebug("set to default : STOP_1");
+ break;
+ }
+
+ //设置数据流控制
+ com->setFlowControl(FLOW_OFF);
+ //设置延时
+ com->setTimeout(TIME_OUT);
+
+ if(com->open(QIODevice::ReadWrite)){
+ res = true;
+ }
+
+ return res;
+}
+
+void MainWindow::try_set_active_port()
+{
+ unsigned int s_port_count = ui->portNameComboBox->count();
+
+ QextSerialPort *com = NULL;
+
+ for (unsigned int i = 0; i < s_port_count; i++)
+ {
+ QString portName = ui->portNameComboBox->itemText(i);
+ #ifdef Q_OS_LINUX
+ com = new QextSerialPort("/dev/" + portName);
+ #elif defined (Q_OS_WIN)
+ com = new QextSerialPort(portName);
+ #endif
+ if (try_open(com))
+ {
+ ui->portNameComboBox->setCurrentIndex(i);
+ com->close();
+ delete(com);
+ break;
+ }
+ delete(com);
+ }
+}
+
+
void MainWindow::startInit(){
setActionsEnabled(false);
ui->delayspinBox->setEnabled(false);
@@ -115,56 +204,9 @@ void MainWindow:n_actionOpen_triggered()
#elif defined (Q_OS_WIN)
myCom = new QextSerialPort(portName);
#endif
- connect(myCom, SIGNAL(readyRead()), this, SLOT(readMyCom()));
- //设置波特率
- myCom->setBaudRate((BaudRateType)ui->baudRateComboBox->currentText().toInt());
-
- //设置数据位
- myCom->setDataBits((DataBitsType)ui->dataBitsComboBox->currentText().toInt());
-
- //设置校验
- switch(ui->parityComboBox->currentIndex()){
- case 0:
- myCom->setParity(PAR_NONE);
- break;
- case 1:
- myCom->setParity(PAR_ODD);
- break;
- case 2:
- myCom->setParity(PAR_EVEN);
- break;
- default:
- myCom->setParity(PAR_NONE);
- qDebug("set to default : PAR_NONE");
- break;
- }
-
- //设置停止位
- switch(ui->stopBitsComboBox->currentIndex()){
- case 0:
- myCom->setStopBits(STOP_1);
- break;
- case 1:
- #ifdef Q_OS_WIN
- myCom->setStopBits(STOP_1_5);
- #endif
- break;
- case 2:
- myCom->setStopBits(STOP_2);
- break;
- default:
- myCom->setStopBits(STOP_1);
- qDebug("set to default : STOP_1");
- break;
- }
-
- //设置数据流控制
- myCom->setFlowControl(FLOW_OFF);
- //设置延时
- myCom->setTimeout(TIME_OUT);
- if(myCom->open(QIODevice::ReadWrite)){
+ if(try_open(myCom)){
QMessageBox::information(this, tr("打开成功"), tr("已成功打开串口") + portName, QMessageBox::Ok);
//界面控制
ui->sendmsgBtn->setEnabled(true);
|
|