- 运行效果
- widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSerialPortInfo>
#include <QSerialPort>
#include <QDebug>
#include <QTextCodec>
#include <QMessageBox>
#include <QImage>
#include <QPixmap>
#include <QTimer>
#include <QDateTime>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_OpenCom_clicked();
void timeUpdate();
private:
Ui::Widget *ui;
QSerialPort *serial;
QTimer *timer;
};
#endif
- widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite)){
ui->ComBox->addItem(serial.portName());
serial.close();
}
}
ui->BaudBox->setCurrentIndex(0);
QString imgname("D:\\QtCode\\SerialDemo\\close.PNG");
QImage *img = new QImage;
if(!img->load(imgname))
{
QMessageBox::information(this,tr("打开图像失败"),tr("打开图像失败"));
delete img;
return;
}
ui->lbl_img->setPixmap(QPixmap::fromImage(*img));
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()),this, SLOT(timeUpdate()));
timer->start(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_OpenCom_clicked()
{
if(ui->OpenCom->text()=="打开串口"){
serial = new QSerialPort;
serial->setPortName(ui->ComBox->currentText());
serial->open(QIODevice::ReadWrite);
serial->setBaudRate(ui->BaudBox->currentText().toInt());
switch (ui->DataBitBox->currentIndex()) {
case 8:
serial->setDataBits(QSerialPort::Data8);
break;
default:
break;
}
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
ui->OpenCom->setText("关闭串口");
ui->ComBox->setEnabled(false);
ui->BaudBox->setEnabled(false);
ui->DataBitBox->setEnabled(false);
ui->ParityBox->setEnabled(false);
ui->StopBox->setEnabled(false);
QString imgname("D:\\QtCode\\SerialDemo\\open.PNG");
QImage *img = new QImage;
if(!img->load(imgname))
{
QMessageBox::information(this,tr("打开图像失败"),tr("打开图像失败"));
delete img;
return;
}
ui->lbl_img->setPixmap(QPixmap::fromImage(*img));
connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));
}
else{
serial->clear();
serial->close();
serial->deleteLater();
ui->OpenCom->setText(" 打开串口");
ui->ComBox->setEnabled(true);
ui->BaudBox->setEnabled(true);
ui->DataBitBox->setEnabled(true);
ui->ParityBox->setEnabled(true);
ui->StopBox->setEnabled(true);
QString imgname("D:\\QtCode\\SerialDemo\\close.PNG");
QImage *img = new QImage;
if(!img->load(imgname))
{
QMessageBox::information(this,tr("打开图像失败"),tr("打开图像失败"));
delete img;
return;
}
ui->lbl_img->setPixmap(QPixmap::fromImage(*img));
}
}
void Widget::timeUpdate()
{
QDateTime time = QDateTime::currentDateTime();
QString str = time.toString("yyyy/MM/dd hh:mm:ss dddd");
ui->time_edit->setText(str);
}