【问题标题】:How can I see and storage the data from device in QT?如何在 QT 中查看和存储来自设备的数据?
【发布时间】:2017-09-18 01:00:32
【问题描述】:

我的 qt 用户界面。

我想要什么。

我正在与我的设备进行串行通信。我制作了一个 ui,我可以使用 ui 连接我的设备。我想从设备获取数据日志并使用 QTimer 在 qt 中显示。

我该怎么做?并希望将数据保存到 csv 文件。

请帮助我,让我知道如何解决问题

下面是我的代码。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtSerialPort/QSerialPort>
#include <QSerialPortInfo>
#include <QMessageBox>
#include <QObject>
#include <QIODevice>
#include <QDebug>
#include <QPlainTextEdit>
#include <QDateTime>

QSerialPort serial;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    mSerialport{new QSerialPort}
{
    ui->setupUi(this);

    connect(this->mSerialport,SIGNAL(readyRead()),
            this,SLOT(readSerialData()));
    connect(ui->pushButton_send,
            &QPushButton::clicked, [=](){
        sendMsg(ui->textEdit->toPlainText());

    });

}
MainWindow::~MainWindow()
{
    delete mSerialport;
    delete ui;
}

void MainWindow::on_pushButton_connect_clicked()
{
    mSerialport->setPortName("/dev/ttyUSB0");
    mSerialport->setBaudRate(QSerialPort::Baud9600);
    mSerialport->setDataBits(QSerialPort::Data8);
    mSerialport->setParity(QSerialPort::NoParity);
    mSerialport->setStopBits(QSerialPort::OneStop);
    mSerialport->setFlowControl(QSerialPort::NoFlowControl);
    if (mSerialport->open(QIODevice::ReadWrite))
    { QMessageBox::information(this,tr("connect"),
                               "serialcommunication start");
    }
    else {
        QMessageBox::information(this,tr("fail"),
                                 mSerialport->errorString());
    }

}

void MainWindow::on_pushButton_disconnect_clicked()
{
    QMessageBox::information(this, tr("disconnect"),
                             "serial communication end");
    mSerialport->close();
}

void MainWindow::sendMsg(const QString &msg)
{
    QString str = msg;
    str.append("\n");
    this->mSerialport->write(str.toLatin1());

    ui->comLog->insertPlainText(QDateTime::currentDateTime().
                                toString("yyyy-MM-dd hh:mm:ss") + " [send] " + msg + "\n");
}

void MainWindow::recvMsg(){
    QByteArray msg = this->mSerialport->readAll();
    ui->comLog->insertPlainText(QDateTime::currentDateTime().
                                toString("yyyy-MM-dd hh:mm:ss") + " [recieve] " + msg.toHex().
                                data() + "\n");
}

【问题讨论】:

  • 您的实际问题是什么?从设备读取?使用 QTimer?显示数据?请避免包含不必要的信息。见How to Ask

标签: c++ qt serial-communication qtserialport


【解决方案1】:

你可以看到this example

要将数据存储在日志文件中,可以这样写入数据。

QByteArray data = serial->readAll();
QFile file("log.csv");
file.open(QIODevice::Append);
file.write(data);
file.close();

【讨论】:

  • 感谢您的回复。我添加代码 //void MainWindow::readData() { QByteArray data = serial->readAll(); QFile 文件("log.csv"); file.open(QIODevice::Append);文件.写(数据);文件.close(); } // 并执行,但什么也没发生,也找不到 log.csv 。不使用上层代码,如何解决问题?我应该使用can bus吗?
  • @eyllanesc 感谢您的回复。我写的代码如你所知。但 qt 通知 QIODevice:: write() 是正确的。括号里应该写什么?
  • @kararara 打扰一下,试试file.open(QIODevice::Append|QIODevice::WriteOnly);file.open(QIODevice::WriteOnly);
  • @eyllanesc 没有错误谢谢。但在添加此代码之前和之后没有任何变化..我似乎没有任何效果..
  • log.csv更改为log.csv的完整路径
猜你喜欢
  • 2021-06-01
  • 2017-09-02
  • 2012-06-23
  • 2023-04-07
  • 2018-01-03
  • 2013-07-13
  • 1970-01-01
  • 2019-05-24
  • 2011-01-17
相关资源
最近更新 更多