これまでの学習を元に。
成果物

 実行ファイルと同じパスにmemo.txtファイルができる。LineEditでEnterキーを押下すると追記する。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 2018-06-27
- Qt 5.7.1
ソースコード
要点を抜粋。
#include <QFile> #include <QDir> #include <QTextStream> #include <QMessageBox> #include <QDebug> void MainWindow::on_lineEdit_returnPressed() { QString filePath = QDir(QApplication::applicationDirPath()).filePath(tr("memo.txt")); QFile file(filePath); if (!file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) { QMessageBox::information(this, tr("ファイルが開けませんでした"), file.errorString()); return; } QTextStream out(&file); out << ui->lineEdit->text() << endl; qDebug() << ui->lineEdit->text(); file.close(); }
学んだこと
- MainWindow
- レイアウト
- タイトル
 
- LineEdit
- reternPressed()
 
- MessageBox
- ファイルパスの結合
- アプリのルートディレクトリ
- ファイルの追記モード
MainWindow
レイアウト
ウインドウの幅に応じてLineEditを拡大・縮小したい。
- デザイナでMainWindowを右クリックする
- 右クリックメニュー→レイアウト→格子状に並べるを選択する
  
- ウインドウの幅が自動拡縮されるようになった
  
タイトル
ウインドウのタイトルを変更したい。

- 画面右下プロパティウインドウのフィルタにtitleを入力する
- WindowTitleプロパティの値を任意に設定する
LineEdit
1行テキスト編集UI。
- 画面左上のフィルタにlineを入力する
- UI候補にLineEditが表示される
- MainWidnowへドラッグ&ドロップする
シグナル: reternPressed()
Enterキー押下時のイベント。
- MainWindowに配置したLineEditを右クリックする
- スロットへ移動をクリックする
- reternPressed()を選択して- OKする

MessageBox
#include <QMessageBox> QMessageBox::information(this, tr("タイトル"), tr("本文"));
ファイルパスの結合
#include <QDir> QDir(tr("/dir")).filePath(tr("file.txt"));
アプリのルートディレクトリ
QApplication::applicationDirPath()
ファイルの追記モード
 QIODevice::Append。|で他のフラグも併用可。
QFile file(filePath); file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text);
参考
- 14. Qtでファイルを出力する (CSVファイル) - Dr.TOMOTOMO
- Qt:ファイル書き込み | ひろみのみ
- 雑記ブログ(仮) [Qt] アプリケーションの絶対パスを取得する
- Qtでウィンドウを大きくしてもウィジェットのサイズが変わらない? | Tips
Qt要素
- QFile Class | Qt Core 5.11
- QDir Class | Qt Core 5.11
- QTextStream Class | Qt Core 5.11
- QMessageBox Class | Qt Widgets 5.11
課題
- ウインドウの高さを増やすとLineEditがセンタリングされてしまう。上の位置はずらしたくない。どうすればいいのやら……

所感
やっと何か作った感を少し持てた。