这次的需求背景是:在麒麟系统中打上QtSerialPort包之后如何确认可以在QT中可以正常访问串口呢?于是在QT中写一个对名为ttyWCH1的自回环串口进行读写操作的测试工程。
先在QT正常创建工程成功后,将编写下面main.cpp内容
#include <QCoreApplication>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
/*
// 显示可用的串口信息
qDebug() << "Available serial ports:";
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
qDebug() << "Name: " << info.portName();
qDebug() << "Description: " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
qDebug() << "System Location: " << info.systemLocation();
qDebug() << "Vendor ID: " << info.vendorIdentifier();
qDebug() << "Product ID: " << info.productIdentifier();
qDebug() << "Busy: " << info.isBusy();
qDebug() << "------------------------------------";
}
*/
// 设置串口参数
QSerialPort serial;
serial.setPortName("ttyWCH1"); // 请替换为实际的串口名称
serial.setBaudRate(QSerialPort::Baud115200);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
// 打开串口
if (serial.open(QIODevice::ReadWrite)) {
qDebug() << "Serial port opened successfully.";
// 发送数据
QByteArray dataToWrite = "Hello, Serial Port!";
qint64 bytesWritten = serial.write(dataToWrite);
qDebug() << bytesWritten << " bytes written.";
// 接收数据
QByteArray dataRead = serial.readAll();
qDebug() << "Received data: " << dataRead;
// 关闭串口
serial.close();
qDebug() << "Serial port closed.";
} else {
qDebug() << "Failed to open serial port.";
}
return a.exec();
}
以上获取可用串口信息的获取部分值得一提(当然这部分也可以去除,因为在当前需求中只需要测试一个串口即可)
// 显示可用的串口信息
qDebug() << "Available serial ports:";
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
qDebug() << "Name: " << info.portName();
qDebug() << "Description: " << info.description();
qDebug() << "Manufacturer: " << info.manufacturer();
qDebug() << "System Location: " << info.systemLocation();
qDebug() << "Vendor ID: " << info.vendorIdentifier();
qDebug() << "Product ID: " << info.productIdentifier();
qDebug() << "Busy: " << info.isBusy();
qDebug() << "------------------------------------";
}
foreach是C++中的一个循环结构,用于遍历容器中的元素。在这个代码块中,foreach
用于遍历QSerialPortInfo::availablePorts()
返回的串行端口信息集合。
QSerialPortInfo::availablePorts()
是一个静态成员函数,用于获取系统中可用的串行端口信息。它返回一个QList<QSerialPortInfo>
类型的对象,其中包含了系统中所有可用的串行端口信息。
在foreach
循环中,每次迭代都会取出一个QSerialPortInfo
对象,并将其赋值给变量info
。然后,可以使用info
对象的成员函数来获取该串行端口的各种属性,如名称、描述、制造商等。这些属性通过qDebug()
输出到控制台。