我有一个QLineEdit *的QList
QList<QLineEdit*> example;
示例将包含100项lineEdits。
当我尝试保存或加载到文件时,如果有的话,它无法正确保存或加载QList
。我得到的数据远远低于预期。
我在QList<T>
的资源页面here上看到,&lt;&lt;&lt;&lt; &安培; &GT;&gt;中
但我似乎无法使用QDataStream
我还尝试将LineEdits中的所有“text()”值复制到单独的String List中,但我仍然无法将它们保存到文件中。任何帮助将不胜感激。
编辑:看起来就是这样。这就是我如何阅读它们,有没有更简单的方法,或者我已经覆盖了它?
//memoryAddresses
for(int i = 0; i < 100; i++)
{
QString temp;
loadFile >> temp;
memAddr.at(i)->setText(temp);
}
答案 0 :(得分:5)
QList<QLineEdit*>
是一个指针列表(基本上是int,所以如果你把它写到文件中,你就不会得到太多有用的信息。
text()
方法应该可以满足您的需求。
foreach( const QLineEdit* le, example )
{
if( le )
{
ds << le->text();
}
}
请注意displayText和text之间的差异。
回读:
如果你只使用字符串,那么QTextStream类可以使用得更好(也可以在上面使用而不是QDataStream ...为了保持一致,尽管你应该使用相同类型的流读写)。我目前无法测试此代码,但您可以尝试这样的代码:
QList<QLineEdit*> example;
while(!stream.atEnd())
{
QString str;
stream >> str;
if( stream.isNull() )
break;
QLineEdit* le = new QLineEdit();
le->setText(str);
example.append(le);
}
答案 1 :(得分:1)
流不分配字符串对象。 使用QString对象而不是指针。
//memoryAddresses
for(int i = 0; i < 100; i++)
{
QString temp;
loadFile >> temp;
memAddr.at(i)->setText(temp);
}
或者您可以编写自己的QLineEdit流功能
QDataStream& operator<<(QDataStream& stream, const QLineEdit& lineEdit )
{
const qint32 version(0);
stream << version;
stream << lineEdit.text();
//... whatever you want from the lineedit
}
QDataStream& operator>>(QDataStream& stream, const QLineEdit& lineEdit )
{
qint32 version(0);
QString text;
stream >> version;
Q_ASSERT_X(version, __FUNCSIG__, "Wrong line edit version");
stream >> text;
lineEdit.setText(text);
//... whatever you want from the stream
}
// write to stream
foreach( const QLineEdit* le, example )
{
if( le )
{
ds << *le;
}
}
// read from stream
foreach( const QLineEdit* le, example )
{
if( le )
{
ds >> *le;
}
}