「QMLの基礎 - ダイアログ」の版間の差分
120行目: | 120行目: | ||
<br> | <br> | ||
== ファイル選択ダイアログ == | == ファイル選択ダイアログ == | ||
==== QWidgetのファイル選択ダイアログ ==== | |||
QMLからQWidgetのファイル選択ダイアログを使用することもできる。<br> | |||
<br> | |||
ただし、純粋なQMLアプリケーションではなくなることに注意する。<br> | |||
<br> | |||
QWidgetを使用するには、<code>QGuiApplication</code>から<code>QApplication</code>に変更する必要がある。<br> | |||
つまり、QWidgetインスタンスの作成に必要な機能を提供する<code>QApplication</code>を使用する。<br> | |||
<br> | |||
* QGuiApplication | |||
*: ウインドウやGUI (OpenGLやQtQuick等のウィジェットに関連しないもの) の処理に関連するものである。 | |||
* QApplication | |||
*: ウィジェットの処理に関連する機能であり、QGuiApplicationを拡張するものである。 | |||
<syntaxhighlight lang="c++"> | |||
// 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(); | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] |
2024年9月2日 (月) 07:00時点における版
概要
ディレクトリ選択ダイアログ
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();
}