#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { m_serialPort = new QSerialPort(); ui->setupUi(this); setWindowTitle("Serial Helper"); } MainWindow::~MainWindow() { delete ui; } void MainWindow::receiveData() { QByteArray data = m_serialPort->readAll(); qDebug() << "\nreceived data: " << data.length() << data.toHex(); } void MainWindow::on_btn_serial_search_clicked() { QStringList m_serialPortNameList; foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { m_serialPortNameList << info.portName(); qDebug() << "Serial port discovered: " << info.portName(); } ui->comboBox_serial->clear(); ui->comboBox_serial->addItems(m_serialPortNameList); if (m_serialPortNameList.length() > 0) { ui->comboBox_serial->setCurrentIndex(0); } } void MainWindow::on_btn_serial_toggle_clicked() { if (ui->comboBox_serial->currentText() == "") { QMessageBox::information(this, "", "请选择串口"); return; } if (m_serialPort->isOpen()) { m_serialPort->clear(); m_serialPort->close(); qDebug() << "Serial port closed"; ui->btn_serial_toggle->setText("打开串口"); // enable serial port comboBoxes ui->comboBox_serial->setDisabled(false); ui->comboBox_baud->setDisabled(false); ui->btn_serial_search->setDisabled(false); } else { m_serialPort->setPortName("/dev/" + ui->comboBox_serial->currentText()); if (!m_serialPort->open(QIODevice::ReadWrite)) { QMessageBox::information(this, "", "串口打开失败"); qDebug() << "Serial open failed"; return; } qDebug() << "Serial open successful"; ui->btn_serial_toggle->setText("关闭串口"); // handle baud rate QSerialPort::BaudRate t_BaudRate; switch(ui->comboBox_baud->currentIndex()) { case 0: t_BaudRate = QSerialPort::Baud2400; break; case 1: t_BaudRate = QSerialPort::Baud4800; break; case 2: t_BaudRate = QSerialPort::Baud9600; break; case 3: t_BaudRate = QSerialPort::Baud115200; break; default: t_BaudRate = QSerialPort::Baud9600; break; } // serial port configuration m_serialPort->setBaudRate(t_BaudRate); m_serialPort->setDataBits(QSerialPort::Data8); m_serialPort->setFlowControl(QSerialPort::NoFlowControl); m_serialPort->setParity(QSerialPort::NoParity); m_serialPort->setStopBits(QSerialPort::OneStop); connect(m_serialPort, SIGNAL(readyRead()), this, SLOT(receiveData())); // disable serial port comboBoxes ui->comboBox_serial->setDisabled(true); ui->comboBox_baud->setDisabled(true); ui->btn_serial_search->setDisabled(true); } }