QT串口助手功能的完善
  micz61TEX78l 2023年11月02日 44 0

(文章目录)


前言

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

一、保存接收到的数据

这里首先使用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串口助手即可获取。 大家也可以自己对这个串口助手进行改造,相信大家可以做的更好。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
micz61TEX78l