2016-02-20 2 views
-1

Итак, у меня есть несколько ярлыков с текстом, и я хотел бы сохранить все эти ярлыки за один раз в QVector<QString>. Код ниже - это то, что я пробовал, и он работает, но когда я загружаю сохраненный файл, ничего не загружается, я проверил сохраненный файл с помощью блокнота, и там есть вещи, так что, возможно, опция загрузки работает неправильно? Я не уверен, но помощь приветствуется. Я также спрашиваю, можете ли вы предложить лучший способ сделать это, если это кажется плохим или ужасно неэффективным способом, снова спасибо за помощь заранее.Qt - Как сохранить и загрузить 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(); 
} 

ответ

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]); 
+0

я получаю сообщение об ошибке, и он говорит: не подходит для 'оператора >>' (типы операндов QVector и QString) –

+0

О, вы будете необходимо выполнить ручную индексацию. На самом деле такого оператора нет. – LogicStuff

+0

Можете ли вы объяснить, как? Я не лучший, когда дело доходит до qt. –