12.「ファイルを開く」を作ろう!!
[1] actionOpenに処理を書く
アクションエディタ画面より、「actionOpen」をクリック、続けてマウスの右ボタンをクリックすると、ポップアップ メニューが表示されるので、「スロットへ移動」をクリックします。
QAction trggered()をタプルクリックすると、自動的にC++のエディタに移動します。
#include "mainwindow.h"
#include "./ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
...中略...
void MainWindow::on_actionOpen_triggered()
{
}
on_actionOpen_triggered()関数にカーソルが移動しています。
[2] QFileDialogをインクルード!
今回は、「ファイルを開く」の画面を呼び出すので、準備作業として、
Qt5のQFileDialogを先に#Inculudeしておきます。
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QFileDialog> /* これを追加 */
MainWindow::MainWindow(QWidget *parent)
...中略...
void MainWindow::on_actionOpen_triggered()
{
}
[3] ファイル名の変数を用意
次にファイル名を入れる変数を用意します。
Qt5の文字列型の変数 (変数名:fileName)
※注意: Qt5用のQString型は、C++の標準 String型を拡張したモノ
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
...中略...
void MainWindow::on_actionOpen_triggered()
{
QString fileName; /* これを追加 */
}
[4] 「ファイルを開く」画面を呼び出す
次に用意した変数に「ファイルを開く」画面の戻り値を入れます。
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
...中略...
void MainWindow::on_actionOpen_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open"), "", tr("Text File(*.txt);;All Files(*.*)"));
}
[5] ステータスバーに表示する
せっかく、戻り値で、ファイル名を取得したので、とりあえずステータスバーに表示しましょう!!
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent)
...中略...
void MainWindow::on_actionOpen_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open"), "", tr("Text File(*.txt);;All Files(*.*)"));
ui->statusbar->showMessage(fileName); /* これを追加 */
}
13.動作確認!!
画面の左下にある、右三角マークの「実行」ボタンをクリックすると、何やら右下側にビルドしている状況が表示され、「MainWindow」が出てくる!
作ったアプリのメニューで、[File | Open]で、「ファイルを開く」画面が動く事をを確認しましょう!!
「ファイルを開く」画面で、「キャンセル」ボタンをクリックすると、fileName = ""となる。
14.getOpenFileName関数の引数の説明
[1] this :ここは、親オブジェクトの設定
[2] tr("Open") :ここは、「ファイルを開く」のタイトル
[3] "" :ここは、画面を呼び出した時のファイルパス
「マイ ドキュメント」などを設定できる。
[4] tr("Text File( *.txt );;All Files( * . * )") :ここは、拡張子のフィルター
フィルターは、セミコロン(;)を二つで区切りする
Text File( *.txt *.xml *.json )のように複数にもできる。
画像の場合は、Image File( *.jpg *.png *.gif *.tiff )のように設定できる。
今回は、ここまで次回は、「名前を付けて保存」を作ろう!!です。