QTextStream 向文件中写入数据

QTextStream write data in file

我正在学习 QtCreator,但在文件中写入数据时遇到了问题。这是一些代码:

char    *str;
int     i = 1;
QFile outFile("path/to/file/out.txt");
outFile.open(QIODevice::ReadWrite);
QTextStream out(&outFile);

while (i < rows * 2) {
    str = dynamic_cast<QLineEdit *>(this->getItem(i))->text().toLocal8Bit().data();
    std::cout << str << std::endl;
    out << str << "\n";
    i += 2;
}

getItem returns 来自 QFormLayoutQWidget * 填充 QLineEdit (这解释了动态转换)。无论如何,当我将 str 传递给 std::cout 时它工作正常,数据被打印,但是当我将 str 传递给 out 时,它只写入 [= 的第一个字符15=] 在文件中。
我不明白我做错了什么,我真的很感激任何提示。

这一行有问题:str = dynamic_cast<QLineEdit *>(this->getItem(i))->text().toLocal8Bit().data();

dynamic_cast<QLineEdit *>(this->getItem(i))-> 可以
->text() 创建临时 QString
.toLocal8Bit() 创建临时 QByteArray
.data() returns 指向 QByteArray

的内部数据的指针

一旦通过该行,QByteArray 就会被销毁,并且您有一个悬空指针。 str 指向无效数据。

之后你对这个指针所做的一切(除了让它指向其他地方)都是未定义的行为。

尝试使用这样的东西:

int     i = 1;
QFile outFile("path/to/file/out.txt");
outFile.open(QIODevice::ReadWrite);
QTextStream out(&outFile);
while (i < rows * 2) 
{
    QLineEdit* lineEdit = dynamic_cast<QLineEdit *>(this->getItem(i));
    if (lineEdit)
    {
        QByteArray str = lineEdit->text().toLocal8Bit();
        std::cout << str.data() << std::endl;
        out << str.data() << "\n";
        i += 2;
    }
    else
    {
        std::cerr << "Item at " << i << " is no QLineEdit*" << std::endl;
    }
}
out.close();

另外请检查QFile是否真的打开,QTextStream写入时是否报错