QTEXTStream提供空字符串

QTextStream provides empty string

本文关键字:字符串 QTEXTStream      更新时间:2023-10-16

此代码有什么问题?(在QT环境中,我想使用QTEXTSTREAM,但是结果字符串为空。使用字符串,代码正常。顺便说一句:QT不支持直接使用的模板(例如向量和字符串)?)

有什么具体原因
    QString MyFileName;
    QTextStream ts; 
    ts << DirName.c_str() 
       << QDate::currentDate().toString("_yyyy_MM_dd.log").toStdString().c_str() 
       << " (" << ++VolumeNumber << ")";
    ts >> MyFileName;
    string FileName= MyFileName.toStdString();

使用标准流,这要简单得多:

   ostringstream oss;
    oss << DirName.c_str() << QDate::currentDate().toString("_yyyy_MM_dd.log").toStdString().c_str() << " (" << ++VolumeNumber << ")";
    FileName= oss.str();

QT方法的优势是什么?

这是因为您未将任何设备分配给QTextStream。它在QIODevice上操作(您也可以使用QString,内部将由QTextStream通过QBuffer代理),因此它无能为力。您应该这样做:

QString buffer;
QTextStream ts(&buffer);

输入数据后,设备在末尾设置了,因此从中读取为空字符串,因此这是另一个错误。要从中读取它,您需要使用以下方式重置设备:

ts.device()->reset();

将将基础设备移至开始。如果是随机访问设备,则可以seek到某些位置并从那里开始。

您想要的东西仍然无法使用,因为您要序列化的东西,而不是试图进行挑选(上述所有问题都没有承受)。您应该首先序列化的字符串,用QTextStream序列化并再次对其进行序列化。