-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 に答える