-1

所以我有多个充满文本的标签,我想将所有这些标签一次性保存到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();
}
4

1 回答 1

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();

并且您对加载执行相同的操作。为什么?“数据流”在运算符的方向(<<- 进入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]);
于 2016-02-20T23:45:06.273 回答