18.「ファイル情報をチェックする」を作ろう!!
「ファイルを開く」と「名前を付けて保存」のファイル名がバラバラなのは、ファイル名を関数間で、共有できていないからだ!
各関数から使える「共有変数」を定義する。
Qtには、QFileInfoクラスが用意されており、これを使ってファイル名などを共有する。
この変数は、mainwindow.hファイルのmainwindowクラスに変数を定義する。
[1] QFileInfoをインクルードする。
[2] 共有変数: fileInfoを定義する。
...省略...
#include <QMainWindow>
#include <QFileInfo> /* これを追加 */
...省略...
class MainWindow : public QMainWindow
{
...省略...
private:
Ui::MainWindow *ui;
QFileInfo fileInfo; /* これを追加 */
};
#endif // MAINWINDOW_H
[3] 共有変数にファイル名を設定する。 fileInfo.setFile()
[4] fileInfoから、絶対パスを取得する。fileInfo.absoluteFilePath()
[5] getSaveFileName()の3番目の引数に絶対パスを指定する。
...省略...
MainWindow::MainWindow(QWidget *parent)
...省略...
void MainWindow::on_actionOpen_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open"), "", tr("Text File(*.txt);;All Files(*.*)"));
fileInfo.setFile(fileName); /* これを追加 */
ui->statusbar->showMessage(fileInfo.absoluteFilePath()); /* fileName変数から、fileInfoに変更する */
}
void MainWindow::on_actionSaveAs_triggered()
{
QString filePath = fileInfo.absoluteFilePath(); /* これを追加 */
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), filePath, tr("Text File(*.txt)")); /* 3番目の引数を""から取得したパスを設定 */
fileInfo.setFile(fileName); /* これを追加 */
ui->statusbar->showMessage(fileInfo.absoluteFilePath()); /* fileName変数から、fileInfoに変更する */
}
19.動作確認!!
画面の左下にある、右三角マークの「実行」ボタンをクリックすると、何やら右下側にビルドしている状況が表示され、「MainWindow」が出てくる!
作ったアプリのメニューで、[File | Open]で、開き(つもり 実際には、まだ何もしていない)、[File | SaveAs]で、開いた場所(=パス)で、開いたファイル名が出てくるはずだ!!
※SaveAsで、上書きOKでも、まだ何もしていないので、影響はありません。
ただ、SaveAsで、[キャンセル]した場合、ファイル名なしの状態で、fileInfoに設定されるので、続けて[File | SaveAs]を行うと、ファイル名が消えてしまう。
20.C++のif文が登場!!
QString型には、文字列の長さが取得できるので、「もし。長さが 0以上ならば、fileInfoに設定する」ように追加していく。
void MainWindow::on_actionSaveAs_triggered()
{
QString filePath = fileInfo.absoluteFilePath();
QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), filePath, tr("Text File(*.txt)"));
if (fileName.length() > 0){ /* これを追加 */
fileInfo.setFile(fileName);
}
ui->statusbar->showMessage(fileInfo.absoluteFilePath());
}
21.再度、動作確認!!
画面の左下にある、右三角マークの「実行」ボタンをクリックして、「MainWindow」が出てくる!
[1] [File | Open]で、他のフォルダーのファイルを開いてみる。
[2] [File | SaveAs]で、[キャンセル]してみる。
[3] 再度、[File | SaveAs]で、開いたファイル名がでる事を確認する。
22.QFileInfoクラスは、便利!!
QFileInfoクラスは、絶対パス(absoluteFilePath)以外にも、いろいろ使える。
[1] fileInfo.baseName()で、ファイル名(拡張子なし)を取得
[2] fileInfo.fileName()で、ファイル名(拡張子あり)を取得
[3] fileInfo.suffix()で、拡張子のみを取得
[4] fileInfo.size()で、ファイル サイズを取得
[5] fileInfo.lastModified()で、ファイルの最終更新日時を取得
など、大変 便利に使える。
今回は、ここまで次回は、アプリ情報を記録しよう!!です。