QT串口助手功能的完善

简介: QT串口助手功能的完善

前言

在前几篇文章中我们已经完成了串口的基本布局和串口的收发功能,下面我们对串口的其他功能进行完善。


一、保存接收到的数据

这里首先使用QFileDialog中的getSaveFileName函数打开一个文件对话框得到要保存的文件名,然后判断文件名是否为空,不为空的话打开文件,使用QTextStream将接收到的数据写入文件中,最后关闭文件。

/*保存接收到的数据*/
void SerialPort::on_saveRecvbtn_clicked()
{
    /*得到选择的文件名*/
    QString filename = QFileDialog::getSaveFileName(this, "另存为", "C:/", tr("Text Files(*.txt)"));
    /*判断文件名是否为空*/
    if(!filename.isEmpty())
    {
        QFile file(filename);
        if(file.open(QIODevice::WriteOnly))
        {
            QTextStream out(&file);
            out << ui->RecvText->toPlainText();
            file.close();
        }
    }
}

二、隐藏面板

这个函数大家一看就能明白。

/*隐藏面板*/
void SerialPort::on_Showhidebtn_clicked()
{
    MulisHide = !MulisHide;
    if(MulisHide)
    {
        ui->MulBox->show();
        ui->Showhidebtn->setText("隐藏面板");
    }
    else
    {
        ui->Showhidebtn->setText("拓展面板");
        ui->MulBox->hide();
    }
}

三、多文本框的操作

重置多文本框区域的状态和清空字符串。

/*重置发送特定字符串区域*/
void SerialPort::on_Resetbtn_clicked()
{
    QMessageBox::StandardButton  ret = QMessageBox::information(this, "提示", "重置表格将不可逆,确认是否重置?"
                                                                , QMessageBox::Yes | QMessageBox::No);
    if(ret == QMessageBox::Yes)
    {
        /*清除多文本发送区域的字符串*/
        ui->StringEdit1->clear();
        ui->StringEdit2->clear();
        ui->StringEdit3->clear();
        ui->StringEdit4->clear();
        ui->StringEdit5->clear();
        ui->StringEdit6->clear();
        ui->StringEdit7->clear();
        ui->lineEdit_17->clear();
        /*清除HEX的状态*/
        ui->HexSend1->setChecked(false);
        ui->HexSend2->setChecked(false);
        ui->HexSend3->setChecked(false);
        ui->HexSend4->setChecked(false);
        ui->HexSend5->setChecked(false);
        ui->HexSend6->setChecked(false);
        ui->HexSend7->setChecked(false);
        ui->HexSend8->setChecked(false);
    }
}

保存多文本框中的状态和字符串:

这里我们将是否选择hex和字符串使用@分隔开来方便我们读取。

一个状态和一个字符串对应文件中的一行数据。

/*保存多文本框中的数据*/
void SerialPort::on_pushButton_9_clicked()
{
    /*得到选择的文件名*/
    QString filename = QFileDialog::getSaveFileName(this, "另存为", "C:/", tr("Text Files(*.txt)"));
    /*判断文件名是否为空*/
    if(!filename.isEmpty())
    {
        QFile file(filename);
        if(file.open(QIODevice::WriteOnly))
        {
            QTextStream out(&file);
            out << QString::number(ui->HexSend1->isChecked()) +"@" + ui->StringEdit1->text();
            out << "\n";
            out << QString::number(ui->HexSend2->isChecked()) +"@"+ ui->StringEdit2->text();
            out << "\n";
            out << QString::number(ui->HexSend3->isChecked()) +"@"+ ui->StringEdit3->text();
            out << "\n";
            out << QString::number(ui->HexSend4->isChecked()) +"@"+ ui->StringEdit4->text();
            out << "\n";
            out << QString::number(ui->HexSend5->isChecked()) +"@"+ ui->StringEdit5->text();
            out << "\n";
            out << QString::number(ui->HexSend6->isChecked()) +"@"+ ui->StringEdit6->text();
            out << "\n";
            out << QString::number(ui->HexSend7->isChecked()) +"@"+ ui->StringEdit7->text();
            out << "\n";
            out << QString::number(ui->HexSend8->isChecked()) +"@"+ ui->lineEdit_17->text();
            file.close();
        }
    }
}

读取文件中的多文本框数据并显示出来:

这里使用到了QString中的split函数,因为上面我们使用@来分隔数据所以我们使用这个函数可以分别得到状态和字符串。

得到后我们将对应的状态和字符串保存到m_HexStatusList和m_SendStringList链表中。保存完成后根据保存的数据设置多文本框的状态和数据。

/*读取保存到的数据并载入多文本框中*/
void SerialPort::on_pushButton_10_clicked()
{
    m_HexStatusList.clear();
    m_SendStringList.clear();
    /*得到选择的文件名*/
    QString filename = QFileDialog::getOpenFileName(this, "载入文件", "C:/", tr("Text Files(*.txt)"));
    /*判断文件名是否为空*/
    if(!filename.isEmpty())
    {
        QFile file(filename);
        if(file.open(QIODevice::ReadOnly))
        {
            QTextStream in(&file);
            while(!in.atEnd())
            {
                QString data = in.readLine();
                QStringList str = data.split('@');
                m_HexStatusList.append(str[0]);
                m_SendStringList.append(str[1]);
            }
            file.close();
        }
    }
    /*将读取出来的状态和字符串设置进去*/
    ui->HexSend1->setChecked(m_HexStatusList[0].toInt());
    ui->StringEdit1->setText(m_SendStringList[0]);
    ui->HexSend2->setChecked(m_HexStatusList[1].toInt());
    ui->StringEdit2->setText(m_SendStringList[1]);
    ui->HexSend3->setChecked(m_HexStatusList[2].toInt());
    ui->StringEdit3->setText(m_SendStringList[2]);
    ui->HexSend4->setChecked(m_HexStatusList[3].toInt());
    ui->StringEdit4->setText(m_SendStringList[3]);
    ui->HexSend5->setChecked(m_HexStatusList[4].toInt());
    ui->StringEdit5->setText(m_SendStringList[4]);
    ui->HexSend6->setChecked(m_HexStatusList[5].toInt());
    ui->StringEdit6->setText(m_SendStringList[5]);
    ui->HexSend7->setChecked(m_HexStatusList[6].toInt());
    ui->StringEdit7->setText(m_SendStringList[6]);
    ui->HexSend8->setChecked(m_HexStatusList[7].toInt());
    ui->lineEdit_17->setText(m_SendStringList[7]);
}

总结

主要的功能我们已经基本实现了,我会将源代码放在公众号中,回复:QT串口助手即可获取。

大家也可以自己对这个串口助手进行改造,相信大家可以做的更好。

相关文章
|
2月前
|
开发框架 Java 编译器
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
53 0
|
2月前
|
存储 传感器 安全
【串口通信】使用C++和Qt设计和实现串口协议解析器(二)
【串口通信】使用C++和Qt设计和实现串口协议解析器
82 0
|
2月前
|
存储 开发框架 算法
【串口通信】使用C++和Qt设计和实现串口协议解析器(一)
【串口通信】使用C++和Qt设计和实现串口协议解析器
210 0
|
2月前
|
Linux API C语言
Qt串口编程探究:理论与实践
Qt串口编程探究:理论与实践
81 1
|
7月前
|
Linux API Windows
linux系统中利用QT实现蓝牙功能的方法
linux系统中利用QT实现蓝牙功能的方法
253 0
|
7月前
|
Linux
linux系统中利用QT实现音乐播放器的功能
linux系统中利用QT实现音乐播放器的功能
104 0
|
7月前
|
Ubuntu Linux API
linux系统中使用QT实现摄像头功能的方法
linux系统中使用QT实现摄像头功能的方法
116 0
|
7月前
|
存储 Linux
linux系统中使用QT实现多媒体的功能方法
linux系统中使用QT实现多媒体的功能方法
85 0
|
5月前
|
网络安全 C++ 索引
C++ Qt开发:TabWidget实现多窗体功能
`QTabWidget` 是Qt中用于实现标签页(tabbed interface)的控件,可以在一个窗口内切换不同的页面。在开发窗体应用时通常会伴随功能的分页,使用TabWidget并配合自定义Dialog组件,即可实现一个复杂的多窗体分页结构,此类布局方式也是多数软件通用的方案。
68 0
C++ Qt开发:TabWidget实现多窗体功能

推荐镜像

更多