如何在 QT 中查看和存储来自设备的数据?
Posted
技术标签:
【中文标题】如何在 QT 中查看和存储来自设备的数据?【英文标题】:How can I see and storage the data from device in 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),
mSerialportnew 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。 【参考方案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
的完整路径以上是关于如何在 QT 中查看和存储来自设备的数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在ios设备中存储来自url的json数据并在本地使用它