2017-10-03 14 views
1

Comment écrire les données entrantes du port série dans un fichier texte (.txt). L'écriture des données doit durer une heure. Ensuite, le code de données de lecture série:Comment puis-je écrire les données entrantes du port série dans un fichier texte (.txt)

void MainWindow::readData() 
{ 
    QByteArray data = serial->readAll(); 
    QDataStream stream(data); 

    double value; 
    stream>>value; 
    console->putData(data); 
    qDebug()<<value; 
} 

J'ai essayé de cette façon, mais a échoué

void Write(QString Filename) 
{ 
    QFile mFile(Filename); 

    if(!mFile.open(QFile::WriteOnly | QFile::Text)) 
    { 
     qDebug() << "Could not open file for writing"; 
     return; 
    } 


    QTextStream out(&mFile); 
    out << data; 
    mFile.flush(); 
    mFile.close(); 
} 

Répondre

0

Je vous suggère d'utiliser QByteArray pour recevoir et le signal utilisé readyRead() pour appeler fonction de réception lorsque les données sont reçues .

QSerialPort *serialPort= new QSerialPort(); 
connect(serialPort, &QSerialPort::readyRead, this, &MainWindow::receiveData_WriteToFile); 

Cette fonction lit et écrit les données dans un fichier.

void MainWindow::receiveData_WriteToFile() 
{ 
    if (serialPort->isOpen()) 
    { 
     QByteArray DataReceived; 
     QFile LogFile("D:/data.txt"); 
     if(!LogFile.open(QFile::Append | QFile::Text)) 
     { 
      //Can't Open Log File. 
     } 
     if(serialPort->bytesAvailable()) 
     { 
      DataReceived = serialPort->readAll();//All Data Received Successfully. 
      if(DataReceived.size() > 0) 
      { 
       if(LogFile.isOpen()) 
       { 
        QTextStream in(&LogFile); 
        in << DataReceived; 
       } 

       LogFile.close(); 
      } 
      else 
      { 
       //Fail To Receive Data. 
      } 
     } 
     LogFile.close(); 
    } 
} 

readyRead(): Ce signal est émis une fois à chaque fois que de nouvelles données sont disponibles pour la lecture du canal de lecture de l'appareil. Il ne sera émis à nouveau qu'une fois les nouvelles données disponibles, par exemple lorsqu'une nouvelle charge de données réseau est arrivée sur votre socket réseau ou lorsqu'un nouveau bloc de données a été ajouté à votre périphérique.

fichier de sortie:

Screenshot

Ceci est un exemple de projet pour votre question sur github download here.

+0

merci pour l'aide. vous avez ajouté l'option de navigation, quelle est l'utilisation de cela ?, et je dois donner un intervalle de temps d'une heure que les données de réception en série doivent écrire dans le fichier texte avec des données et l'heure? – explorer104

+0

@ explorer104 J'ai utilisé le bouton Parcourir pour obtenir le répertoire de localisation des fichiers. 'getExistingDirectory', et utilisez QTimer pour recevoir des données comme ça. http://doc.qt.io/qt-5/qtimer.html – aghilpro