これまでの学習を元に。
成果物
実行ファイルと同じパスに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がセンタリングされてしまう。上の位置はずらしたくない。どうすればいいのやら……
所感
やっと何か作った感を少し持てた。