VS2010 + QT5 SerialPort 串口应用实例总结

31 篇文章 0 订阅

原文链接:http://blog.csdn.net/qq61394323/article/details/43446977

希望转发者保留。

VS2010 + Qt5 SerialPort下面代码的关键两个地方,就是读和写两个位置,因为串口是不稳定的,所以必须以这种方式来收发。

#include "stdafx.h"
#include "serialporttesttool.h"

SerialPortTestTool::SerialPortTestTool(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	sp = new QSerialPort("com4",this);
	if (sp->open(QIODevice::ReadWrite))
	{
		sp->setBaudRate(QSerialPort::Baud115200,QSerialPort::AllDirections);
		sp->setDataBits(QSerialPort::Data8);
		sp->setStopBits(QSerialPort::OneStop);
		sp->setParity(QSerialPort::NoParity);
		sp->setFlowControl(QSerialPort::NoFlowControl);
		//connect(sp,SIGNAL(readyRead()),this,SLOT(serialRead()));
	}
}

SerialPortTestTool::~SerialPortTestTool()
{
	sp->close();
	delete sp;
}

void SerialPortTestTool::on_lineEdit_returnPressed()
{
	QByteArray command = ui.lineEdit->text().trimmed().toLocal8Bit() + "\r\n";
	sp->write(command,command.length());
	ui.lineEdit->setText("");
	if (sp->waitForBytesWritten(2000))
	{
		ui.textEdit->append("ok");
	}
	else
	{
		ui.textEdit->append("failed");
	}
}
void SerialPortTestTool::serialRead()
{
	static QByteArray allData;
	QByteArray dataTemp;
	while (!sp->atEnd())
	{
		dataTemp = sp->readLine();
		ui.textEdit->append(QString::fromLatin1(dataTemp));
	}
}

void SerialPortTestTool::on_pushButton_clicked()
{
	QByteArray temp = sp->readAll();
	while (sp->waitForReadyRead(10))
	{
		temp += sp->readAll();
	}

	ui.textEdit->append(QString::fromLatin1(temp));

}


 

### 回答1: 在Qt Creator中关闭串口,首先需要包含SerialPort类的头文件: ```cpp #include <QSerialPort> ``` 然后在需要关闭串口的位置,创建QSerialPort对象,并使用close()函数关闭串口: ```cpp QSerialPort serialPort; serialPort.close(); ``` 关闭串口后,可以进行其他操作或者释放资源。 为了保证正确关闭串口,在程序的析构函数或者退出事件函数中再次调用close()函数关闭串口: ```cpp MyClass::~MyClass() { serialPort.close(); } ``` 或者在窗口关闭事件函数中关闭串口: ```cpp void MainWindow::closeEvent(QCloseEvent *event) { serialPort.close(); event->accept(); } ``` 以上是使用Qt自带的QSerialPort类关闭串口的方式,当然还可以使用其他的方式,如使用Windows API或者Linux系统调用,但要注意在使用完串口后及时关闭以释放资源。 ### 回答2: 在Qt Creator中,关闭串口Serial Port)的方法如下: 首先,我们需要在代码中获取到串口对象(QSerialPort),可以通过实例QSerialPort类来获得。例如: ```cpp QSerialPort serialPort; ``` 然后,打开串口并进行相关设置: ```cpp serialPort.setPortName("COM1"); // 设置串口名称,例如:COM1、COM2等 serialPort.setBaudRate(QSerialPort::Baud9600); // 设置波特率 serialPort.setDataBits(QSerialPort::Data8); // 设置数据位 serialPort.setParity(QSerialPort::NoParity); // 设置校验位 serialPort.setStopBits(QSerialPort::OneStop); // 设置停止位 serialPort.open(QIODevice::ReadWrite); // 打开串口 ``` 接下来,当需要关闭串口时,可以调用close()函数来关闭串口: ```cpp serialPort.close(); ``` 需要注意的是,关闭串口时,要确保在不再使用串口时才关闭,否则可能会导致通讯中断。在关闭串口之前,也可以通过调用clear()函数来清空串口缓冲区。 以上就是使用Qt Creator中关闭串口的方法。在实际使用中,我们可以根据需要进行适当的错误处理、异常处理及其他设置,以确保串口的正常关闭与稳定工作。 ### 回答3: 在Qt Creator中关闭串口serial port),需要执行以下步骤: 1. 首先,在你的Qt Creator项目中,确保已经包含了<QSerialPort>头文件,以便使用串口功能。 2. 创建一个QSerialPort对象,用于管理串口通信。例如: ```cpp QSerialPort serialPort; ``` 3. 在需要关闭串口的地方,调用close()函数关闭串口。例如: ```cpp serialPort.close(); ``` 4. 最后,在Qt Creator中编译和运行你的程序,当程序执行到关闭串口的代码时,串口将会被关闭。 完整的示例代码如下: ```cpp #include <QCoreApplication> #include <QtSerialPort/QSerialPort> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QSerialPort serialPort; // 打开串口设置 serialPort.setPortName("COM1"); serialPort.setBaudRate(QSerialPort::Baud115200); serialPort.setDataBits(QSerialPort::Data8); serialPort.setParity(QSerialPort::NoParity); serialPort.setStopBits(QSerialPort::OneStop); // 打开串口 bool success = serialPort.open(QIODevice::ReadWrite); if (!success) { qDebug() << "Failed to open serial port."; return 1; } // 通信... // 关闭串口 serialPort.close(); return a.exec(); } ``` 注意事项: - 在关闭串口之前,确保已经完成所需的通信操作。 - 如果在关闭串口之前,未打开串口或者串口已经关闭,调用close()函数将不会产生任何效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值