123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include "QSerialPort"
- #include "QSerialPortInfo"
- #include "QMessageBox"
- #include "QDateTime"
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- //设置左右比例为2:8
- ui->splitter_left_right->setStretchFactor(0,2);
- ui->splitter_left_right->setStretchFactor(1,8);
- //设置上下比例为7:3
- ui->splitter_top_bot->setStretchFactor(0, 7);
- ui->splitter_top_bot->setStretchFactor(1, 3);
- scanSerialPort();
- baudInit();
- databitInit();
- stopbitInit();
- parityInit();
- serialPort = new QSerialPort(this);
- ui->checkBox_autoline->setChecked(true);
- ui->checkBox_timestamp->setChecked(true);
- portOpened = false;
- ui->pushButton_send->setEnabled(false);
- connect(serialPort, SIGNAL(readyRead()), this, SLOT(serialPortReadyRead()));
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::scanSerialPort()
- {
- foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
- ui->comboBox_port->addItem(info.portName());
- }
- }
- void MainWindow::baudInit()
- {
- QList <QString> list;
- list<<"1200"<<"2400"<<"4800"<<"9600"<<"19200"<<"38400"<<"57600"<<"115200";
- for (int i = 0; i < 8; i++) {
- ui->comboBox_baud->addItem(list[i]);
- }
- ui->comboBox_baud->setCurrentIndex(3);
- }
- void MainWindow::databitInit()
- {
- QList <QString> list;
- list<<"5"<<"6"<<"7"<<"8";
- for (int i = 0; i < 4; i++) {
- ui->comboBox_databit->addItem(list[i]);
- }
- ui->comboBox_databit->setCurrentIndex(3);
- }
- void MainWindow::stopbitInit()
- {
- QList <QString> list;
- list<<"1"<<"2";
- for (int i = 0; i < 2; i++) {
- ui->comboBox_stopbit->addItem(list[i]);
- }
- ui->comboBox_stopbit->setCurrentIndex(0);
- }
- void MainWindow::parityInit()
- {
- QList <QString> list;
- list<<"None"<<"Even"<<"Odd"<<"Space"<<"Mark";
- for (int i = 0; i < 5; i++) {
- ui->comboBox_parity->addItem(list[i]);
- }
- ui->comboBox_parity->setCurrentIndex(0);
- }
- void MainWindow::on_pushButton_open_clicked()
- {
- if (portOpened == false) {
- serialPort->setPortName(ui->comboBox_port->currentText());
- serialPort->setBaudRate(ui->comboBox_baud->currentText().toInt());
- switch (ui->comboBox_databit->currentText().toInt()) {
- case 5:
- serialPort->setDataBits(QSerialPort::Data5);
- break;
- case 6:
- serialPort->setDataBits(QSerialPort::Data6);
- break;
- case 7:
- serialPort->setDataBits(QSerialPort::Data7);
- break;
- case 8:
- serialPort->setDataBits(QSerialPort::Data8);
- break;
- default:
- break;
- }
- switch (ui->comboBox_stopbit->currentText().toInt()) {
- case 1:
- serialPort->setStopBits(QSerialPort::OneStop);
- break;
- case 2:
- serialPort->setStopBits(QSerialPort::TwoStop);
- break;
- default:
- break;
- }
- switch (ui->comboBox_parity->currentIndex()) {
- case 0:
- serialPort->setParity(QSerialPort::NoParity);
- break;
- case 1:
- serialPort->setParity(QSerialPort::EvenParity);
- break;
- case 2:
- serialPort->setParity(QSerialPort::OddParity);
- break;
- case 3:
- serialPort->setParity(QSerialPort::SpaceParity);
- break;
- case 4:
- serialPort->setParity(QSerialPort::MarkParity);
- break;
- default:
- break;
- }
- if (!serialPort->open(QIODevice::ReadWrite)) {
- QMessageBox::about(NULL, "错误", "串口打开失败");
- } else {
- portOpened = true;
- ui->comboBox_baud->setEnabled(false);
- ui->comboBox_databit->setEnabled(false);
- ui->comboBox_parity->setEnabled(false);
- ui->comboBox_port->setEnabled(false);
- ui->comboBox_stopbit->setEnabled(false);
- ui->pushButton_open->setText("关闭");
- ui->pushButton_send->setEnabled(true);
- }
- } else {
- // close serial port
- serialPort->close();
- portOpened = false;
- ui->comboBox_baud->setEnabled(true);
- ui->comboBox_databit->setEnabled(true);
- ui->comboBox_parity->setEnabled(true);
- ui->comboBox_port->setEnabled(true);
- ui->comboBox_stopbit->setEnabled(true);
- ui->pushButton_open->setText("打开");
- ui->pushButton_send->setEnabled(false);
- }
- }
- void MainWindow::on_pushButton_clean_recv_clicked()
- {
- ui->textBrowser->clear();
- }
- void MainWindow::on_pushButton_clean_send_clicked()
- {
- ui->textEdit->clear();
- }
- void MainWindow::on_pushButton_send_clicked()
- {
- QByteArray data = ui->textEdit->toPlainText().toUtf8();
- serialPort->write(data);
- serialPort->waitForBytesWritten(data.size());
- }
- void MainWindow::serialPortReadyRead()
- {
- QByteArray buf = serialPort->readAll();
- QString str;
- if (ui->checkBox_timestamp->isChecked()) {
- QDateTime cur = QDateTime::currentDateTime();
- str = cur.toString("[yy-MM-dd hh:mm:ss] ") + QString(buf);
- } else {
- str = QString(buf);
- }
- if (ui->checkBox_autoline->isChecked())
- ui->textBrowser->append(str);
- else
- ui->textBrowser->insertPlainText(str);
- }
|