c++ - 如何将串口传入数据写入文本文件(.txt)

标签 c++ qt qt4

如何将串口传入的数据写入文本文件(.txt)..数据写入间隔时间为一小时。 以下是串行读取数据代码:

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

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

我试过这种方法,但失败了

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();
}

最佳答案

我建议您使用QByteArray 接收数据,并在接收到数据时使用信号readyRead() 调用接收函数。

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

此函数读取数据并将其写入文件。

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() :每当有新数据可用于从设备的当前读取 channel 读取时,此信号就会发出一次。它只会在新数据可用时再次发出,例如当新的网络数据有效负载到达您的网络套接字时,或者当新的数据 block 已附加到您的设备时。

输出文件:

Screenshot

这是您关于 github download here. 问题的示例项目

关于c++ - 如何将串口传入数据写入文本文件(.txt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46541133/

相关文章:

c++ - 如何做类似 "is_atomically_assignable"的事情?

c++ - 结构序列化

Qt:空透明QImage有噪音

c++ - 我在 QT creator : Could not find qmake configuration file linux-g++-64 中有这个错误

c++ - 诺基亚 Qt 中的进度条?

c++ - 在 c/c++ 代码中使用什么宏来识别 Mavericks OSX 10.9?

c++ - 在主 win32 窗口中创建窗口控制台

c++ - 如何更改另一个 qml 文件的标签文本?

python - 已禁用的 Qt 按钮在 Plasma 5.2 (KDE 5) 中未显示为已禁用

qt4 - 更改 QTreeView 中显示扩展箭头的列