QMLの基礎 - ダイアログ
概要
ディレクトリ選択ダイアログ
FolderDialog
FolderDialogは、ネイティブプラットフォームのディレクトリ選択ダイアログのためのQML APIを提供する。
※注意
Qt.labs Platformモジュールのアイテムは、将来のバージョンでの互換性が保証されていない。
ディレクトリ選択ダイアログを表示するには、FolderDialogの定義やプロパティを記述して、openメソッドを呼び出す。
currentFolderプロパティは、ダイアログ内で現在選択されているディレクトリのURLが設定される。
folderプロパティは、ダイアログの選択ボタンにより選択された後にのみ設定される。
FolderDialogの使用手順を以下に示す。
Qt Labs Platformモジュールは、ネイティブな実装が利用できないプラットフォーム上のフォールバックとしてQt Widgetsを使用している。
したがって、Qt Labs Platformモジュールのアイテムを使用する場合、
QtWidgetsライブラリをリンクして、QGuiApplicationクラスの代わりにQApplicationクラスを使用する必要がある。
まず、QtWidgetsライブラリをリンクするには、.proファイルに以下の設定を追記する。
# .proファイル QT += 〜 widgets
main関数において、QGuiApplicationクラスの代わりにQApplicationクラスのインスタンスを生成する。
// main.cppファイル
#include <QApplication>
//#include <QGUIApplication>
#include <QQmlApplicationEngine>
// ...略
int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
//QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QApplication app(argc, argv);
QQmlApplicationEngine engine;
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app,
[url](QObject *obj, const QUrl &objUrl)
{
if (!obj && url == objUrl)
{
QCoreApplication::exit(-1);
}
}, Qt::QueuedConnection);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
FileDialogやStandardPathsも参照すること。
FileDialogのプロパティを以下に示す。
- acceptLabel
- 値 : string型 (既定値 : 空の文字列)
- ダイアログの選択ボタンに表示されるラベルテキストを設定する。
- 空の文字列を設定すると、プラットフォームの標準のラベルテキスト(Open)が使用される。
- rejectLabelプロパティも参照すること。
- rejectLabel
- 値 : string (既定値 : 空の文字列)
- ダイアログのキャンセルボタンに表示されるラベルテキストを設定する。
- 空の文字列を設定すると、プラットフォームの標準のラベルテキスト(Cancel)が使用される。
- acceptLabelプロパティも参照すること。
- currentFolder
- 値 : url型 (既定値 : なし)
- ダイアログで現在選択されているフォルダを設定する。
- folderプロパティとは異なり、currentFolderプロパティは、ダイアログ内でディレクトリを選択している間、最終的な選択がなされる前でも更新される。
- folderプロパティも参照すること。
- folder
- 値 : url型 (既定値 : なし)
- 最終的に選択されたディレクトリのURLが設定される。
- currentFolderプロパティとは異なり、folderプロパティはダイアログでディレクトリを選択している間は更新されず、最終的な選択が行われた後にのみ更新される。
- つまり、Openボタンを押下した場合、または、acceptedシグナルを処理して最終選択をした場合のみである。
- currentFolderプロパティおよびacceptedメソッドも参照すること。
- options
- 値 : enumlation型 (既定値 : なし)
- ダイアログの外観に影響を与える様々なオプションを設定する。
- 既定値では、全てのオプションが無効になっている。
- optionsプロパティは、ダイアログを表示する前に設定する必要がある。
- ダイアログが表示されている間に設定を変更した場合、ダイアログに影響を与えることは保証されていない。
- 使用可能なoptionsプロパティの値を、以下に示す。
| 定数 | 説明 |
|---|---|
| FolderDialog.ShowDirsOnly | ディレクトリのみを表示する。 既定値では、フォルダとディレクトリの両方を表示する。 |
| FolderDialog.DontResolveSymlinks | シンボリックリンクを解決しない。 既定値では、シンボリックリンクを解決する。 |
| FolderDialog.ReadOnly | ダイアログ内でディレクトリの作成を許可しない。 |
ファイル選択ダイアログ
QWidgetのファイル選択ダイアログ
QMLからQWidgetのファイル選択ダイアログを使用することもできる。
ただし、純粋なQMLアプリケーションではなくなることに注意する。
QWidgetを使用するには、QGuiApplicationからQApplicationに変更する必要がある。
つまり、QWidgetインスタンスの作成に必要な機能を提供するQApplicationを使用する。
- QGuiApplication
- ウインドウやGUI (OpenGLやQtQuick等のウィジェットに関連しないもの) の処理に関連するものである。
- QApplication
- ウィジェットの処理に関連する機能であり、QGuiApplicationを拡張するものである。
// main.cppファイル
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
set_qt_environment();
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(u"qrc:/qt/qml/Main/main.qml"_qs);
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreated,
&app,
[url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
},
Qt::QueuedConnection);
engine.addImportPath(QCoreApplication::applicationDirPath() + "/qml");
engine.addImportPath(":/");
engine.load(url);
if (engine.rootObjects().isEmpty()) {
return -1;
}
return app.exec();
}