2017-09-18 56 views
2

enter image description here如何在QT中查看和存储设备中的数据?

我的用户界面使用qt。

enter image description here

我想要的东西。

我在与我的设备的串行通信qt。我做了一个用户界面,我可以使用用户界面连接我的设备。我想从设备获取数据日志并使用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"); 
} 
+0

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

回答

0

您可以看到this example

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

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

谢谢你的回复。我添加代码 // void MainWindow :: readData() QByteArray data = serial-> readAll(); QFile文件(“log.csv”); file.open(QIODevice :: Append); file.write(data); file.close(); } // 并执行,但没有发生任何事情,无法找到log.csv。而不是使用上面的代码,该怎么做才能解决问题?我应该使用can bus? – kararara

+0

@eyllanesc谢谢您的回复。我写你认识我的代码。但qt通知QIODevice :: write()是正确的。括号中应该写什么? – kararara

+0

@kararara对不起,用'file.open(QIODevice :: Append | QIODevice :: WriteOnly);'或'file.open(QIODevice :: WriteOnly);' – eyllanesc

相关问题