用QT写一个串口助手软件
时间: 2023-10-11 21:07:11 浏览: 50
好的,下面是一个简单的串口助手软件的示例代码,使用QT编写:
```cpp
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QLabel>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QVBoxLayout>
class SerialAssistant : public QMainWindow
{
Q_OBJECT
public:
SerialAssistant(QWidget *parent = nullptr)
: QMainWindow(parent),
m_serialPort(new QSerialPort(this)),
m_textEdit(new QTextEdit(this)),
m_sendData(new QTextEdit(this)),
m_sendButton(new QPushButton(tr("发送"), this))
{
// 初始化串口
m_serialPort->setBaudRate(QSerialPort::Baud115200);
m_serialPort->setDataBits(QSerialPort::Data8);
m_serialPort->setParity(QSerialPort::NoParity);
m_serialPort->setStopBits(QSerialPort::OneStop);
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);
// 创建界面
QWidget *centralWidget = new QWidget(this);
setCentralWidget(centralWidget);
QVBoxLayout *vLayout = new QVBoxLayout(centralWidget);
QHBoxLayout *hLayout = new QHBoxLayout();
vLayout->addLayout(hLayout);
vLayout->addWidget(m_textEdit);
vLayout->addWidget(m_sendData);
vLayout->addWidget(m_sendButton);
QLabel *portLabel = new QLabel(tr("串口:"), this);
hLayout->addWidget(portLabel);
m_portComboBox = new QComboBox(this);
hLayout->addWidget(m_portComboBox);
QLabel *baudRateLabel = new QLabel(tr("波特率:"), this);
hLayout->addWidget(baudRateLabel);
m_baudRateComboBox = new QComboBox(this);
hLayout->addWidget(m_baudRateComboBox);
QLabel *dataBitsLabel = new QLabel(tr("数据位:"), this);
hLayout->addWidget(dataBitsLabel);
m_dataBitsComboBox = new QComboBox(this);
hLayout->addWidget(m_dataBitsComboBox);
QLabel *parityLabel = new QLabel(tr("校验位:"), this);
hLayout->addWidget(parityLabel);
m_parityComboBox = new QComboBox(this);
hLayout->addWidget(m_parityComboBox);
QLabel *stopBitsLabel = new QLabel(tr("停止位:"), this);
hLayout->addWidget(stopBitsLabel);
m_stopBitsComboBox = new QComboBox(this);
hLayout->addWidget(m_stopBitsComboBox);
// 设置串口参数选项
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
m_portComboBox->addItem(info.portName());
}
QStringList baudRates = QStringList() << "1200" << "2400" << "4800" << "9600"
<< "14400" << "19200" << "38400" << "57600" << "115200";
m_baudRateComboBox->addItems(baudRates);
QStringList dataBits = QStringList() << "5" << "6" << "7" << "8";
m_dataBitsComboBox->addItems(dataBits);
QStringList paritys = QStringList() << "None" << "Odd" << "Even";
m_parityComboBox->addItems(paritys);
QStringList stopBits = QStringList() << "1" << "1.5" << "2";
m_stopBitsComboBox->addItems(stopBits);
// 信号槽连接
connect(m_sendButton, &QPushButton::clicked, this, &SerialAssistant::sendData);
connect(m_serialPort, &QSerialPort::readyRead, this, &SerialAssistant::readData);
connect(m_portComboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentTextChanged),
this, &SerialAssistant::updatePort);
connect(m_baudRateComboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentTextChanged),
this, &SerialAssistant::updateBaudRate);
connect(m_dataBitsComboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentTextChanged),
this, &SerialAssistant::updateDataBits);
connect(m_parityComboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentTextChanged),
this, &SerialAssistant::updateParity);
connect(m_stopBitsComboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentTextChanged),
this, &SerialAssistant::updateStopBits);
}
private slots:
void updatePort(const QString &portName)
{
m_serialPort->setPortName(portName);
}
void updateBaudRate(const QString &baudRate)
{
m_serialPort->setBaudRate(baudRate.toInt());
}
void updateDataBits(const QString &dataBits)
{
m_serialPort->setDataBits(static_cast<QSerialPort::DataBits>(dataBits.toInt()));
}
void updateParity(const QString &parity)
{
if (parity == "None") {
m_serialPort->setParity(QSerialPort::NoParity);
} else if (parity == "Odd") {
m_serialPort->setParity(QSerialPort::OddParity);
} else if (parity == "Even") {
m_serialPort->setParity(QSerialPort::EvenParity);
}
}
void updateStopBits(const QString &stopBits)
{
if (stopBits == "1") {
m_serialPort->setStopBits(QSerialPort::OneStop);
} else if (stopBits == "1.5") {
m_serialPort->setStopBits(QSerialPort::OneAndHalfStop);
} else if (stopBits == "2") {
m_serialPort->setStopBits(QSerialPort::TwoStop);
}
}
void sendData()
{
QByteArray data = m_sendData->toPlainText().toUtf8();
m_serialPort->write(data);
}
void readData()
{
QByteArray data = m_serialPort->readAll();
m_textEdit->append(QString::fromUtf8(data));
}
private:
QSerialPort *m_serialPort;
QTextEdit *m_textEdit;
QTextEdit *m_sendData;
QPushButton *m_sendButton;
QComboBox *m_portComboBox;
QComboBox *m_baudRateComboBox;
QComboBox *m_dataBitsComboBox;
QComboBox *m_parityComboBox;
QComboBox *m_stopBitsComboBox;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
SerialAssistant assistant;
assistant.show();
return app.exec();
}
#include "main.moc"
```
这个串口助手软件包含以下功能:
- 显示接收到的串口数据
- 发送指定数据到串口
- 串口参数设置
你可以根据自己的需求对代码进行修改和扩展。