2016-08-22 20 views
1

C++和Qt的新手,我試圖用一個微控制器通過串行發送大量數據(由整數和逗號組成),放入一個用於Excel的.csv文件中。我mainwindow.cpp到目前爲止的代碼(在這裏我已經把用於測試目的的所有動作):如何使用QSerialPort讀取數據以使用QFile寫入文件?

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <string> 
#include <QtSerialPort/QSerialPort> 
#include <QString> 
#include <QTextEdit> 
#include <QFile> 
#include <QTextStream> 

QSerialPort *serial; 
using namespace std; 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    serial = new QSerialPort(this); 
    serial->setPortName("/dev/cu.usbmodemfa131"); 
    serial->setBaudRate(QSerialPort::Baud9600); 
    serial->setDataBits(QSerialPort::Data8); 
    serial->setParity(QSerialPort::NoParity); 
    serial->setStopBits(QSerialPort::OneStop); 
    serial->setFlowControl(QSerialPort::NoFlowControl); 
    serial->open(QIODevice::ReadWrite); 
    connect(serial, SIGNAL(readyRead()), this, SLOT(serialReceived())); 

} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
    serial->close(); 
} 

void MainWindow::serialReceived() 
{ 
    QString filename = "/Users/me/Documents/myFile/datacollecting.csv"; 
    QFile file(filename); 
    QTextStream out(&file); 
    file.open(QIODevice::ReadWrite); 
    QByteArray ba; 
    ba = serial->readAll(); 
    out << ba; 
    file.close(); 
} 

代碼但是是給我一些問題。它不能可靠地工作,並且在結果文件中它只存儲最後10個左右(幾千個)字符。我已經搜索過,但還沒有找到一種方法來正確地存儲大量的串行數據塊。有沒有更好的方法來實現我上面想要做的事情?新的這個,所以任何幫助將不勝感激!

+0

首先,**從'SLOT''移除**返回0' int MainWindow :: serialReceived()'。 – KernelPanic

+0

感謝您的評論,只是編輯更改serialReceived無效的問題。 – user6745003

+2

難道你不想用'QIODevice :: ReadWrite'附加到帶有'QIODevice :: ReadWrite | QIODevice :: Append'的文件中:http://stackoverflow.com/a/13856845/487892 – drescherjm

回答

1

如已經在註釋中所寫,您應該通過添加QIODevice::Append標誌以附加模式打開輸出文件,以便將所有數據寫入文件的末尾。

您也可以連接到error信號,您可以檢查可能的錯誤。請參閱串行端口枚舉here

connect(serial, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError))); 

void MainWindow::handleError(QSerialPort::SerialPortError error) 
{ 
    ... 
} 
相關問題