#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); Init(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::openFile() { static QString loadpath; if (ui->openFile->text() == "打开文件") { //选择导入的文件路径 loadpath = QFileDialog::getOpenFileName(this,"选择文件","/", "Files(*.json)"); qDebug() << loadpath << endl; if(loadpath.isEmpty()) return; jsonModel->loadJson(loadpath); ui->treeView->expandAll(); ui->openFile->setText("保存文件"); openFileFlag = true; if (openFileFlag && openSerialPortFlag) { ui->readConfigFile->setEnabled(true); ui->writeConfigFile->setEnabled(true); } else { ui->readConfigFile->setEnabled(false); ui->writeConfigFile->setEnabled(false); } } else { if(loadpath.isEmpty()) return; jsonModel->dumpJson(loadpath); } } void MainWindow::scanSerialPort() { /* 查找可用串口 */ foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { // ui->SerialPort->addItem(info.portName()); ui->SerialPort->addItem(info.portName() + ":" +info.description()); } } void MainWindow::parityItemInit() { QList list; list<<"None"<<"Even"<<"Odd"<<"Space"<<"Mark"; for (int i = 0; i < 5; i++) { ui->comboBox_4->addItem(list[i]); } ui->comboBox_4->setCurrentIndex(0); } void MainWindow::Init() { ui->readConfigFile->setEnabled(false); ui->writeConfigFile->setEnabled(false); scanSerialPort(); parityItemInit(); serialPort = new QSerialPort(this); jsonModel = new JsonTreeModel(this); ui->treeView->setModel(jsonModel); openSerialPortFlag = false; openFileFlag = false; connect(ui->openFile,SIGNAL(clicked()),this,SLOT(openFile())); connect(ui->SerialPortPushButton,SIGNAL(clicked()) ,this,SLOT(openSerialPortPushButtonClicked())); connect(ui->readConfigFile,SIGNAL(clicked()) ,this,SLOT(readCfgFile())); connect(ui->writeConfigFile,SIGNAL(clicked()) ,this,SLOT(writeCfgFile())); } void MainWindow::openSerialPortPushButtonClicked() { if (ui->SerialPortPushButton->text() == "打开串口") { /* 设置串口名 */ // serialPort->setPortName(ui->SerialPort->currentText()); serialPort->setPort((const QSerialPortInfo)(ui->SerialPort->currentText().section(':', 0, 0))); /* 设置波特率 */ serialPort->setBaudRate(ui->comboBox_2->currentText().toInt()); /* 设置数据位数 */ switch (ui->comboBox_3->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_4->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; } /* 设置停止位 */ switch (ui->comboBox_5->currentText().toInt()) { case 1: serialPort->setStopBits(QSerialPort::OneStop); break; case 2: serialPort->setStopBits(QSerialPort::TwoStop); break; default: break; } /* 设置流控制 */ serialPort->setFlowControl(QSerialPort::NoFlowControl); if (!serialPort->open(QIODevice::ReadWrite)) QMessageBox::about(NULL, "错误", "串口无法打开!可能串口已经被占用!"); else { ui->SerialPort->setEnabled(false); ui->comboBox_2->setEnabled(false); ui->comboBox_3->setEnabled(false); ui->comboBox_4->setEnabled(false); ui->comboBox_5->setEnabled(false); ui->SerialPortPushButton->setText("关闭串口"); ui->label_6->setStyleSheet("color: red;"); // pushButton[0]->setEnabled(true); openSerialPortFlag = true; if (openFileFlag && openSerialPortFlag) { ui->readConfigFile->setEnabled(true); ui->writeConfigFile->setEnabled(true); } else { ui->readConfigFile->setEnabled(false); ui->writeConfigFile->setEnabled(false); } } } else { serialPort->close(); ui->SerialPort->setEnabled(true); ui->comboBox_2->setEnabled(true); ui->comboBox_3->setEnabled(true); ui->comboBox_4->setEnabled(true); ui->comboBox_5->setEnabled(true); ui->label_6->setStyleSheet("color: block;"); ui->SerialPortPushButton->setText("打开串口"); openSerialPortFlag = false; if (openFileFlag && openSerialPortFlag) { ui->readConfigFile->setEnabled(true); ui->writeConfigFile->setEnabled(true); } else { ui->readConfigFile->setEnabled(false); ui->writeConfigFile->setEnabled(false); } } } void MainWindow::readCfgFile() { qDebug(" in readCfgFile "); } void MainWindow::writeCfgFile() { qDebug(" in writeCfgFile "); }