#include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui( new Ui::MainWindow) { ui->setupUi( this ); Pic = tr( "://Resource/关灯.jpg" ); //放置一张图片 ui->lightLabel->setPixmap(Pic); ui->RTextEdit->setReadOnly( false ); ui->STextEdit->setReadOnly( false ); ui->onButton->setEnabled( true ); //默认关灯 ui->offButton->setEnabled( false ); ui->lightDial->setEnabled( false ); serial = new QSerialPort( this ); OpenFlag = false ; //串口未打开 connect(ui->lightDial, SIGNAL(valueChanged( int )), this , SLOT(on_light_chance())); UsartUi(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::UsartUi() //完善串口配置UI { ui->parityBox->addItem(QStringLiteral( "None" ),QSerialPort::NoParity); ui->parityBox->addItem(QStringLiteral( "偶校验" ),QSerialPort::EvenParity); ui->parityBox->addItem(QStringLiteral( "奇校验" ),QSerialPort::OddParity); ui->parityBox->addItem(QStringLiteral( "Mark 1" ),QSerialPort::MarkParity); ui->parityBox->addItem(QStringLiteral( "Space 0" ),QSerialPort::SpaceParity); ui->baundRateBox->setItemData(0,QSerialPort::Baud4800); ui->baundRateBox->setItemData(1,QSerialPort::Baud9600); ui->baundRateBox->setItemData(2,QSerialPort::Baud19200); ui->baundRateBox->setItemData(3,QSerialPort::Baud38400); ui->baundRateBox->setItemData(4,QSerialPort::Baud57600); ui->baundRateBox->setItemData(5,QSerialPort::Baud115200); ui->dataBitBox->setItemData(0,QSerialPort::Data5); ui->dataBitBox->setItemData(1,QSerialPort::Data6); ui->dataBitBox->setItemData(2,QSerialPort::Data7); ui->dataBitBox->setItemData(3,QSerialPort::Data8); ui->stopBitBox->setItemData(0,QSerialPort::OneStop); ui->stopBitBox->setItemData(1,QSerialPort::OneAndHalfStop); ui->stopBitBox->setItemData(2,QSerialPort::TwoStop); PortInfo(); } void MainWindow::PortInfo() { ui->uNameBox->clear(); foreach ( const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { QStringList list; list << info.portName() << info.description() << info.manufacturer() << info.systemLocation() << (info.vendorIdentifier() ? QString::number(info.vendorIdentifier(), 16) : QString()) << (info.productIdentifier() ? QString::number(info.productIdentifier(), 16) : QString()); ui->uNameBox->addItem(list.first(), list); } } //槽函数 void MainWindow::on_startButton_clicked() //打开串口 { if (!OpenFlag) //执行打开串口 { currentConfig.name = ui->uNameBox->currentText(); currentConfig.baudRate = static_cast
(ui->baundRateBox->itemData(ui->baundRateBox->currentIndex()).toInt()); currentConfig.dataBits = static_cast
(ui->dataBitBox->itemData(ui->dataBitBox->currentIndex()).toInt()); currentConfig.stopBits = static_cast
(ui->stopBitBox->itemData(ui->stopBitBox->currentIndex()).toInt()); currentConfig.parity = static_cast
(ui->parityBox->itemData(ui->parityBox->currentIndex()).toInt()); serial->setPortName(currentConfig.name); if (serial->open(QIODevice::ReadWrite)) { if ( serial->setBaudRate(currentConfig.baudRate) && serial->setDataBits(currentConfig.dataBits) && serial->setStopBits(currentConfig.stopBits) && serial->setParity(currentConfig.parity) ) { OpenFlag = true ; ui->startButton->setText(tr( "关闭串口" )); } else { serial->close(); OpenFlag = false ; ui->startButton->setText(tr( "打开串口" )); } } else { OpenFlag = false ; ui->startButton->setText(tr( "打开串口" )); } } else { OpenFlag = false ; ui->startButton->setText(tr( "打开串口" )); serial->close(); } /* ui->STextEdit->setText(tr("校验位:%1 \n波特率:%2 \n数据位:%3 \n停止位:%4") .arg(ui->parityBox->itemData(ui->parityBox->currentIndex()).toString()) .arg(ui->baundRateBox->itemData(ui->baundRateBox->currentIndex()).toString()) .arg(ui->dataBitBox->itemData(ui->dataBitBox->currentIndex()).toString()) .arg(ui->stopBitBox->itemData(ui->stopBitBox->currentIndex()).toString())); */ } void MainWindow::on_offButton_clicked() //关灯 { QByteArray data; QString Pdata; data.resize(3); data[0] = 0xF0; data[1] = 0X0F; data[2] = 0x80; ui->offButton->setEnabled( false ); ui->onButton->setEnabled( true ); ui->lightDial->setValue(1); ui->lightDial->setEnabled( false ); Pdata = data.toHex().toUpper(); int Size = Pdata.size(); for ( int i = Size; i > 0; i--) { Pdata.insert(i * 2, " " ); } ui->STextEdit->insertPlainText(Pdata); //发送数据 serial->write(data); } void MainWindow::on_onButton_clicked() //开灯 0XF0 0X0F 0X81 { QByteArray data; QString Pdata; data.resize(3); data[0] = 0xF0; data[1] = 0X0F; data[2] = 0X81; ui->onButton->setEnabled( false ); ui->offButton->setEnabled( true ); ui->lightDial->setEnabled( true ); Pdata = data.toHex().toUpper(); int Size = Pdata.size() / 2; for ( int i = Size; i > 0; i--) { Pdata.insert(i * 2, " " ); } ui->STextEdit->insertPlainText(Pdata); //发送数据 serial->write(data); } void MainWindow::on_light_chance() { QByteArray data; QString Pdata; data.resize(5); data[0] = 0xF0; data[1] = 0x0F; data[2] = 0xC0; data[3] = 0x01; data[4] = ui->lightDial->value(); Pdata = data.toHex().toUpper(); int Size = Pdata.size() / 2; for ( int i = Size; i > 0; i--) { Pdata.insert(i * 2, " " ); } ui->STextEdit->insertPlainText(Pdata); serial->write(data); } void MainWindow::on_freshButton_clicked() //刷新状态 { QByteArray Rdata = serial->readAll(); QString Pdata = Rdata.toHex().toUpper(); //转换成HEX格式且大写 int Size = Pdata.size()/2; for ( int i = Size; i > 0; i--) //插入空格 使格式如 xx xx xx { Pdata.insert(i * 2, " " ); } ui->RTextEdit->insertPlainText(Pdata); int i = 0; if (Rdata.at(i) && 0xF0 == 0xF0) { i++; if (Rdata.at(i) && 0x0F == 0x0F) { while (Rdata.at(i) != '\0' ) //解析指令 { if (Rdata.at(i) && 0x80 == 0x80)currentStatus.lightOnOff = false ; if (Rdata.at(i) && 0x81 == 0x81)currentStatus.lightOnOff = true ; if (Rdata.at(i) && 0xc0 == 0xc0) { i = i + 2; currentStatus.lightValue = Rdata.at(i); } i++; } } } if (currentStatus.lightOnOff)Pic = tr( "://Resource/开灯.jpg" ); else Pic = tr( "://Resource/关灯.jpg" ); ui->lightLabel->setPixmap(Pic); ui->lightLcdNumber->display(currentStatus.lightValue); } |