此代码有什么问题?(在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
序列化并再次对其进行序列化。