「QMLの基礎 - ダイアログ」の版間の差分
133行目: | 133行目: | ||
*: 一般的に、単一ファイル選択の場合は、<u>selectedFiles[0]</u>を使用する。 | *: 一般的に、単一ファイル選択の場合は、<u>selectedFiles[0]</u>を使用する。 | ||
* <code>fileMode</code>プロパティ | * <code>fileMode</code>プロパティ | ||
*: | *: ファイル選択モードを指定する。 | ||
*: 単一ファイル選択または複数ファイル選択等を指定することができる。 | |||
*: <br> | |||
*: 指定できる値を以下に示す。 | |||
** <code>FileDialog.OpenFile</code> | |||
**: 単一ファイルを選択する。 (デフォルト) | |||
** <code>FileDialog.OpenFiles</code> | |||
**: 複数ファイルを選択する。 | |||
** <code>FileDialog.SaveFile</code> | |||
**: ファイルを保存する。 | |||
* <code>options</code>プロパティ | |||
*: ダイアログの動作オプションを設定する。 | |||
*: 指定できる値を以下に示す。 | |||
** <code>FileDialog.ReadOnly</code> | |||
**: 読み取り専用モード | |||
** <code>FileDialog.DontResolveSymlinks</code> | |||
**: シンボリックリンクを解決しない。 | |||
* <code>currentFolder</code>プロパティ | |||
*: 初期表示するディレクトリを指定する。 | |||
* <code>selectedFile</code>プロパティ | |||
*: 選択されたファイルのURLを保持する。 (単一ファイル選択時) | |||
* <code>selectedFiles</code>プロパティ | |||
*: 選択されたファイルのURL配列 (複数ファイル選択時) | |||
* <code>acceptLabel</code>プロパティ | |||
*: [開く]ボタンおよび[保存]ボタンのラベルをカスタマイズする。 | |||
* <code>rejectLabel</code>プロパティ | |||
*: [キャンセル]ボタンのラベルをカスタマイズする。 | |||
<br> | <br> | ||
<code>FileDialog</code>コンポーネントのシグナルハンドラ (スロット) を以下に示す。<br> | <code>FileDialog</code>コンポーネントのシグナルハンドラ (スロット) を以下に示す。<br> | ||
140行目: | 166行目: | ||
* <code>onRejected</code>ハンドラ | * <code>onRejected</code>ハンドラ | ||
*: ダイアログがキャンセルされた場合の処理を定義する。 | *: ダイアログがキャンセルされた場合の処理を定義する。 | ||
* <code>selectionChanged</code>ハンドラ | |||
*: ファイル選択が変更された時に発行される。 | |||
<br> | <br> | ||
ファイル選択ダイアログを表示する場合は、<code>open</code>メソッドを実行してダイアログを表示する。<br> | ファイル選択ダイアログを表示する場合は、<code>open</code>メソッドを実行してダイアログを表示する。<br> | ||
154行目: | 182行目: | ||
title: "ファイルを選択してください" | title: "ファイルを選択してください" | ||
nameFilters: ["テキストファイル (*.txt)", "すべてのファイル (*)"] | nameFilters: ["テキストファイル (*.txt)", "すべてのファイル (*)"] | ||
fileMode: FileDialog.OpenFile | |||
options: FileDialog.ReadOnly | |||
// ファイルを選択した場合 | // ファイルを選択した場合 | ||
159行目: | 189行目: | ||
console.log("選択されたファイル:", fileDialog.selectedFiles) | console.log("選択されたファイル:", fileDialog.selectedFiles) | ||
selectedFileText.text = "選択されたファイル: " + fileDialog.selectedFiles[0] | selectedFileText.text = "選択されたファイル: " + fileDialog.selectedFiles[0] | ||
} | |||
// ファイル選択が変更された場合 | |||
onSelectionChanged: { | |||
console.log("現在選択中: ", fileDialog.currentFile) | |||
} | } | ||
190行目: | 225行目: | ||
<u>ファイル選択ダイアログの動作は、使用しているプラットフォーム (Windows、MacOS、Linux) により異なる場合がある。</u><br> | <u>ファイル選択ダイアログの動作は、使用しているプラットフォーム (Windows、MacOS、Linux) により異なる場合がある。</u><br> | ||
<br> | <br> | ||
==== QWidgetのファイル選択ダイアログ ==== | ==== QWidgetのファイル選択ダイアログ ==== | ||
QMLからQWidgetのファイル選択ダイアログを使用することもできる。<br> | QMLからQWidgetのファイル選択ダイアログを使用することもできる。<br> |
2024年9月2日 (月) 21:05時点における版
概要
ディレクトリ選択ダイアログ
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 | ダイアログ内でディレクトリの作成を許可しない。 |
ファイル選択ダイアログ
FileDialogコンポーネント
まず、必要なモジュールをインポートして、FileDialog
コンポーネントを使用して、ファイル選択ダイアログを作成する。
これは、一般的に、アプリケーションのメインウィンドウや特定のコンポーネント内で記述する。
FileDialog
コンポーネントのプロパティを以下に示す。
title
プロパティ- ダイアログのタイトルを設定する。
nameFilters
プロパティ- 表示するファイルタイプを制限することができる。
selectedFiles
プロパティ- 選択されたファイルのパスが配列として格納される。
- 一般的に、単一ファイル選択の場合は、selectedFiles[0]を使用する。
fileMode
プロパティ- ファイル選択モードを指定する。
- 単一ファイル選択または複数ファイル選択等を指定することができる。
- 指定できる値を以下に示す。
FileDialog.OpenFile
- 単一ファイルを選択する。 (デフォルト)
FileDialog.OpenFiles
- 複数ファイルを選択する。
FileDialog.SaveFile
- ファイルを保存する。
options
プロパティ- ダイアログの動作オプションを設定する。
- 指定できる値を以下に示す。
FileDialog.ReadOnly
- 読み取り専用モード
FileDialog.DontResolveSymlinks
- シンボリックリンクを解決しない。
currentFolder
プロパティ- 初期表示するディレクトリを指定する。
selectedFile
プロパティ- 選択されたファイルのURLを保持する。 (単一ファイル選択時)
selectedFiles
プロパティ- 選択されたファイルのURL配列 (複数ファイル選択時)
acceptLabel
プロパティ- [開く]ボタンおよび[保存]ボタンのラベルをカスタマイズする。
rejectLabel
プロパティ- [キャンセル]ボタンのラベルをカスタマイズする。
FileDialog
コンポーネントのシグナルハンドラ (スロット) を以下に示す。
onAccepted
ハンドラ- ファイルが選択された場合の処理を定義する。
onRejected
ハンドラ- ダイアログがキャンセルされた場合の処理を定義する。
selectionChanged
ハンドラ- ファイル選択が変更された時に発行される。
ファイル選択ダイアログを表示する場合は、open
メソッドを実行してダイアログを表示する。
import QtQuick
import QtQuick.Controls
import QtQuick.Dialogs
// ...略
FileDialog {
id: fileDialog
title: "ファイルを選択してください"
nameFilters: ["テキストファイル (*.txt)", "すべてのファイル (*)"]
fileMode: FileDialog.OpenFile
options: FileDialog.ReadOnly
// ファイルを選択した場合
onAccepted: {
console.log("選択されたファイル:", fileDialog.selectedFiles)
selectedFileText.text = "選択されたファイル: " + fileDialog.selectedFiles[0]
}
// ファイル選択が変更された場合
onSelectionChanged: {
console.log("現在選択中: ", fileDialog.currentFile)
}
// キャンセルした場合
onRejected: {
console.log("ファイル選択がキャンセルされました")
}
}
Column {
anchors.centerIn: parent
spacing: 20
// ダイアログを表示するためのトリガ (例: ボタン)
Button {
text: "ファイルを開く"
onClicked: fileDialog.open()
}
Text {
id: selectedFileText
text: "ファイルが選択されていません"
}
}
※注意
Qt 6以降では、QtQuick.Dialogs
モジュールを使用する。
Qt 5では、Qt.labs.platform
モジュールを使用する。
ファイル選択ダイアログの動作は、使用しているプラットフォーム (Windows、MacOS、Linux) により異なる場合がある。
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();
}