所以我有多个带有文字的标签,我想将所有这些标签一起保存到QVector<QString>
。下面的代码是我试过的,它可以正常工作,但是当我加载保存的文件时,没有任何东西被加载,我用记事本检查了保存的文件,那里有东西,所以也许加载选项不能正常工作?我不确定,但感谢帮助。我还问你是否可以建议一个更好的方法,如果这看起来像一个坏的或非常低效的方式,再次感谢提前的帮助。
保存代码:
void Tasks::on_pushButton_5_clicked()
{
const int length = 10;
QVector<QString> AllTasks(length);
AllTasks<<ui->label->text()<<ui->label_2->text()<<ui->label_3->text()<<ui->label_4->text()<<
ui->label_5->text()<<ui->label_6->text()<<ui->label_10->text()<<ui->label_11->text()<<
ui->label_12->text()<<ui->label_13->text();
QString fileName = QFileDialog::getSaveFileName(this,tr("Save All Tasks"),"", tr("Tasks(*.tsk);;All Files (*)"));
QFile file(fileName);
if(file.open(QIODevice::WriteOnly)){
QDataStream stream(&file);
stream<<AllTasks;
}
file.close();
}
和加载代码:
void Tasks::on_pushButton_6_clicked()
{
const int length = 10;
QVector<QString> AllTasks(length);
AllTasks<<ui->label->text()<<ui->label_2->text()<<ui->label_3->text()<<ui->label_4->text()<<
ui->label_5->text()<<ui->label_6->text()<<ui->label_10->text()<<ui->label_11->text()<<
ui->label_12->text()<<ui->label_13->text();
QString fileName = QFileDialog::getOpenFileName(this,tr("Save Tasks"),"", tr("Task(*.tsk);;All Files (*)"));
QFile file(fileName);
if(file.open(QIODevice::ReadOnly)){
QDataStream stream(&file);
stream.setVersion(QDataStream::Qt_4_8);
stream>>AllTasks;
}
file.close();
}
答案 0 :(得分:1)
你这样做是为了保存:
AllTasks<<ui->label->text()<<ui->label_2->text()<<ui->label_3->text()<<ui->label_4->text()<<
ui->label_5->text()<<ui->label_6->text()<<ui->label_10->text()<<ui->label_11->text()<<
ui->label_12->text()<<ui->label_13->text();
你也是这样做的。为什么? &#34;数据流&#34;在操作员的方向(<<
- 进入AllTasks
)。此代码不会创建引用标签文本对象的特殊元素。
它完全符合将数据保存到文件的功能。它填满了AllTasks
。然后,使用从文件中读取的数据将其填满。
解决方案:将<<
更改为>>
并移动整个语句,完成阅读文件
修改:没有operator>>
。要么:
ui->label->setText(AllTasks.at(0));
ui->label_2->setText(AllTasks.at(1));
...
ui->label_13->setText(AllTasks.at(12));
或:
QVector<QLabel*> labels << ui->label << ui->label_2 << ... << ui->label_13;
for(int i = 0; i < labels.size() && i < AllTasks.size(); ++i)
labels[i]->setText(AllTasks[i]);