之前学了一下Qt,然后做了一个串口助手。功能测试稳定!初学者可以参考一下!
串口助手-精简版-V3.14
作者:
付强
bearfq@126.com
时间:
2018年1月19日 10:50:53
实现功能:
1.串口收发
2.保存数据到本地
3.打开本地数据文件
4.调整波特率等参数
测试实现:
性能稳定
源程序如下:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- /*设置窗口图标*/
- this->setWindowIcon(QIcon(":/logo256_256.ico"));
- /*激活参数选择框*/
- activeComboBox(true);
- /*显示所有可用端口*/
- showAllPort();
- /*设置接收文本框的光标一直保持在中心*/
- connect(ui->recvTextEdit, SIGNAL(textChanged()), ui->recvTextEdit, SLOT(centerCursor()));
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- /*激活/失活参数选择框*/
- void MainWindow::activeComboBox(bool status)
- {
- ui->serialPortComboBox->setEnabled(status);//端口下选框
- ui->BaudrateComboBox->setEnabled(status);//波特率下选框
- ui->dataBitComboBox->setEnabled(status);//数据位数
- ui->stopBitComboBox->setEnabled(status);//停止位
- ui->parityComboBox->setEnabled(status);//奇偶校验
- ui->flushPortBtn->setEnabled(status);//刷新按钮
- }
- //反转runFlag标志,并返回标志状态
- bool MainWindow::reverseRunFlag()
- {
- if (myThread->runFlag)
- {
- myThread->runFlag = false;
- }
- else
- {
- myThread->runFlag = true;
- }
- return myThread->runFlag;
- }
- /*显示所有可用端口*/
- void MainWindow::showAllPort()
- {
- const auto infos = QSerialPortInfo::availablePorts();//返回可用的端口
- for (const QSerialPortInfo &info : infos)//将所有可用端口加入到下拉框中
- {
- ui->serialPortComboBox->addItem(info.portName());
- }
- }
- /*清除接收文本框中的信息*/
- void MainWindow::on_clearRecvBtn_clicked()
- {
- ui->recvTextEdit->clear();
- }
- /*清除发送文本框中的信息*/
- void MainWindow::on_clearSendBtn_clicked()
- {
- ui->sendTextEdit->clear();
- }
- /*点击open按钮*/
- void MainWindow::on_openBtn_clicked()
- {
- DBUG_OUT;
- if(!reverseRunFlag())//子线程在运行--->关闭子线程
- {
- /*参数设置combobox全部激活*/
- activeComboBox(true);
- /*修改子线程运行标志*/
- myThread->runFlag = false;
- // myThread->finished();
- }
- else//没有运行子线程--->开启子线程
- {
- /*参数设置combobox全部失活*/
- activeComboBox(false);
- /*创建线程*/
- myThread = new MyThread;
- /*传递参数给子线程*/
- myThread->portNameStr = ui->serialPortComboBox->currentText();
- myThread->baudRateStr = ui->BaudrateComboBox->currentText();
- myThread->parityStr = ui->parityComboBox->currentText();
- myThread->dataBitsStr = ui->dataBitComboBox->currentText();
- myThread->stopBitsStr = ui->stopBitComboBox->currentText();
- /*连接信号与槽(将接收的数据显示在接收区中)*/
- connect(myThread, SIGNAL(output(QString)), this, SLOT(showData(QString)));
- //启动线程--->执行线程的run函数
- myThread->start();
- }
- }
- /*显示接收的数据*/
- void MainWindow::showData(QString data)
- {
- DBUG_OUT;
- ui->recvTextEdit->insertPlainText(data);
- }
- /*点击发送按钮,发送数据*/
- void MainWindow::on_sendBtn_clicked()
- {
- DBUG_OUT;
- //1.提取发送数据框文本
- myThread->sendData = ui->sendTextEdit->toPlainText();
- //2.发送标志置1
- myThread->sendFlag = true;
- }
- /*保存接收的数据到文件*/
- void MainWindow::on_saveRecvBtn_clicked()
- {
- DBUG_OUT;
- //1.弹出保存文件的对话框
- QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),"./recvdata",tr("text (*.txt *.cpp *.h)"));
- //2.创建新文件
- QFile file(fileName);
- file.open(QIODevice::ReadWrite | QIODevice::Truncate);
- //3.写入文本到文件中
- //3.1获取text中的文本
- QString text = ui->recvTextEdit->toPlainText();//转成纯文本
- //3.2将文本写入文件中
- file.write(text.toStdString().c_str());//转为标准字符串并返回其首地址
- //4.关闭文件
- file.close();
- }
- /*打开数据文件*/
- void MainWindow::on_openDataBtn_clicked()
- {
- DBUG_OUT;
- //1.弹出对话框:选择文件,获取文件名
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
- "./",
- tr("Text (*.txt *.cpp *.h)"));
- //2.读文件
- //2.1打开文件
- QFile file(fileName);
- file.open(QIODevice::ReadOnly);
- //2.2读文件
- char buf[1024] = {0};
- file.read(buf, sizeof(buf));
- //2.3关闭文件
- file.close();
- //3.在发送区中显示文件信息
- QString text(buf);
- ui->sendTextEdit->insertPlainText(text);
- }
- /*刷新端口*/
- void MainWindow::on_flushPortBtn_clicked()
- {
- ui->serialPortComboBox->clear();//清除原有端口号
- showAllPort();//显示现有端口号
- }
复制代码
所有资料51hei提供下载:
串口助手精简版.rar
(43.19 KB, 下载次数: 276)
|