2017-09-18 8 views
2

enter image description hereComment puis-je voir et stocker les données de l'appareil dans QT?

mon ui avec qt.

enter image description here

ce que je veux.

Je suis en communication série qt avec mon appareil. Je fais un ui et je peux connecter mon appareil en utilisant ui. Je veux obtenir un journal de données de l'appareil et afficher en qt en utilisant QTimer.

comment puis-je le faire? et veulent également enregistrer des données dans un fichier csv.

s'il vous plaît aidez-moi et laissez-moi savoir comment puis-je résoudre le problème

ci-dessous est mon code.

#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

Quel est votre problème réel? Lecture de l'appareil? En utilisant QTimer? Afficher les données? Veuillez éviter d'inclure des informations inutiles. Voir [demander]. – m7913d

Répondre

0

Vous pouvez voir this example.

Pour stocker des données dans un fichier journal, vous pouvez écrire des données de ce type.

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

Merci pour votre réponse. J'ajoute le code // void MainWindow :: readData() { QByteArray data = serial-> readAll(); Fichier QFile ("log.csv"); file.open (QIODevice :: Append); fichier.write (données); file.close(); } // et d'excuter mais rien ne s'est produit et ne peut pas trouver log.csv. Au lieu d'utiliser le code supérieur, que faire pour résoudre le problème? Shoud je peux utiliser le bus? – kararara

+0

@eyllanesc Merci pour votre réponse. J'écris le code comme tu me connais. mais qt informer QIODevice :: write() a raison. Qu'est-ce qui devrait être écrit entre parenthèses? – kararara

+0

@kararara Excusez-moi, Essayez avec 'fichier.open (QIODevice :: Append | QIODevice :: WriteOnly);' ou 'fichier.open (QIODevice :: WriteOnly);' – eyllanesc