#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 )__のように設定できる。
今回は、ここまで次回は、「名前を付けて保存」を作ろう!!です。