1

私はやや初心者で、保存と読み込みを機能させることができません。プログラムにはいくつかのラジオボタンとスピンボックスがあります。これらの位置と値をファイルに保存し、後でもう一度開くことができるようにしたいと思います。これが節約です:

void MainWindow::on_saveButton_clicked()
{
 QString fileName = QFileDialog::getSaveFileName(this,
     tr("Salvesta Projekt"), "",
     tr("Latid Pindalaks (*.lp);;All Files (*)"));

 if (fileName.isEmpty())
     return;
 else {
     QFile file(fileName);
     if (!file.open(QIODevice::WriteOnly)) {
         QMessageBox::information(this, tr("Unable to open file"),
             file.errorString());
         return;
     }
     QDataStream out(&file);
     out.setVersion(QDataStream::Qt_4_8);

     QByteArray MyArray = MainWindow::saveState();

     out << (MyArray);
      }
 }

そしてここにローディングがあります

void MainWindow::on_loadButton_clicked()
{
 QString fileName = QFileDialog::getOpenFileName(this,
     tr("Ava Projekt"), "",
     tr("Latid Pindalaks (*.lp);;All Files (*)"));

 if (fileName.isEmpty())
     return;
 else {

     QFile file(fileName);

     if (!file.open(QIODevice::ReadOnly)) {
         QMessageBox::information(this, tr("Pole võimalik faili laadida"),
             file.errorString());
         return;
     }

     QDataStream in(&file);
     in.setVersion(QDataStream::Qt_4_8);

     in >> (MyArray);

     MainWindow::restoreState(MyArray);
 }
}

私は何か非常に間違ったことをしていることを知っているので、良い例をいただければ幸いです。

4

2 に答える 2

6

QMainWindowのドキュメントには次のように記載されています。

このメインウィンドウのツールバードックウィジェットの現在の状態を保存します。

これは、他のウィジェット(ラジオボタンなど)の状態を自分で保存する必要があることを意味します。

于 2012-06-07T13:09:57.230 に答える
1

QSettingsは、GUIアプリケーションの状態を保存するためによく使用されます。次の例は、QSettingsを使用して、アプリケーションのメインウィンドウのジオメトリを保存および復元する方法を示しています。

 void MainWindow::writeSettings()
 {
     QSettings settings("Moose Soft", "Clipper");

     settings.beginGroup("MainWindow");
     settings.setValue("size", size());
     settings.setValue("pos", pos());
     settings.endGroup();
 }

 void MainWindow::readSettings()
 {
     QSettings settings("Moose Soft", "Clipper");

     settings.beginGroup("MainWindow");
     resize(settings.value("size", QSize(400, 400)).toSize());
     move(settings.value("pos", QPoint(200, 200)).toPoint());
     settings.endGroup();
 }
于 2012-06-12T05:18:39.963 に答える