2017-08-03 42 views
1

QTの仕組みを学んでいます。私は継続的にファイル形式(.txt)でQLineEditラベルの内容を置く可能性がどのように思ったんだけどQt:ファイルに書き込む

QApplication app(argc, argv); 
QWidget fenetre; 
fenetre.setFixedWidth(400); 
fenetre.setFixedHeight(400); 

QPushButton *bouton = new QPushButton("Quit", &fenetre); 
bouton->setFixedHeight(50); 
bouton->setFixedWidth(100); 
bouton->move(170,310); 


QLabel *label = new QLabel("Something", &fenetre); 
label->move(30,200); 
QLineEdit *line = new QLineEdit(&fenetre); 
line->move(200,200); 

QWidget::connect(bouton, SIGNAL(clicked()),qApp, SLOT(quit())); 

fenetre.show(); 

:私はこの小さなコードを持っています。 目的は、プログラムが終了したときにユーザーがテキストファイルにQLineEditボックスに入れた内容を保持することです。

おかげ

+1

'QLabel'または' QLineEdit'ですか? – eyllanesc

+0

私の悪い、私はQLineEditの内容をユーザーが変更できることを意味した、はい。申し訳ありません:/ – Clement

+0

だから、プログラムの終了時にline-> text()の文字列をファイルに保存しようとしましたか? –

答えて

0

テキスト/バイナリ形式のファイルで、データのリード/ライトをQFileを使用することができます。

void MainWindow::on_btnSaveData_clicked() 
{ 
    writeDataInFile(ui->lineEdit->text()); 
} 

機能保存データ:

void MainWindow::writeDataInFile(QString data) 
{ 
    QString filePath = "D:/Your Path"; 
    QFile writeFile(filePath); 
    if(!writeFile.open(QFile::Append | QFile::Text)) 
    { 
     // Can't Open File. 
    } 
    else 
    { 
     if(data.length() > 0) 
     { 
      QTextStream in(&writeFile); 
      in << data << "\r"; 
     } 
    } 
    writeFile.close(); 
} 

この関数は、QStringを取得したファイル(filePath)を開き、ファイルの末尾にデータを追加し

ボタンを押して、データを保存します。

機能を変更して、QByteArrayを機能またはベクターに送信することができます。

1

使用QFileQTextStreamは次のようにQLineEdit::textChanged信号が放出されるとき、ファイルに書き込む:

QObject::connect(line, &QLineEdit::textChanged, [](const QString& text) { 
    QFile file("output.txt"); 

    if(file.open(QFile::WriteOnly | QFile::Text)) { 
     QTextStream stream(&file); 
     stream << text; 
    } 
}); 

コードは、上記lambda expressionQLineEdit::textChangedに信号を接続します。そのラムダのtext引数は、lineの変更内容になります。ラムダ内のコードブロックは、"output.txt"を受信したtextで単純に書き換えます。

+1

downvoteの理由は何ですか? – Akira

+1

私は同じ質問があります。シンプル&良い答え。 upvote。明らかに@Akira。 – aghilpro

0

私は、ファイル形式(.txt)でのQLineEditラベルの内容を置く可能性がどのように思ったんだけど連続。目的は、ユーザがプログラムが終了したときに、テキスト ファイル内のQLineEditボックスに入れた内容を維持することです。

あなたはおそらく、あなたのアプリケーションがを閉じ程度か、「その場で」それをを保存したい、immidiatelyユーザーの種類としてQLineEditに何かあるときQLineEditコンテンツを保存したいのいずれかのように私はこれらの言葉を解釈することができます。両方のケースでは、このようないくつかのsave()機能を使用することができます。

void save(const QString &text) 
{ 
    QFile f("out.txt"); 
    bool ok = f.open(QIODevice::WriteOnly); 

    if(!ok) { 
     qDebug() << "open file error!"; 
     return; 
    } 

    QTextStream stream(&f); 
    stream << text; 
    f.close(); 
} 

をし、その後にこれらconnect関数のいずれかを適用するあなたのmain

// save on type 
QObject::connect(line, &QLineEdit::textChanged, [line](const QString &text) { 
    save(text); 
}); 

// save on application close. 
QObject::connect(&app, &QApplication::aboutToQuit, [line]() { 
    save(line->text()); 
}); 

に応じて、これらのconnect秒のいずれかを使用するのに十分ですあなたの要望。

注:&QApplication::aboutToQuitアプリケーションは、標準ウィンドウの「閉じる」ボタンを押すか、カスタムの「終了」ボタンを押して信号を送信します。

+1

しかし、それは 'QLineEdit'を編集するたびにディスク操作を行うことを意味します。そして時にはそれはあなたが望むものではありません。 –

関連する問題