ダイアログ
Dialog
コンポーネントは、重要な情報を表示したり、ユーザー入力を要求したりするために使用できるモーダルウィンドウを提供します。現在のビューをオーバーレイし、メインアプリケーションのコンテンツに戻る前にユーザーが操作する必要があります。RinUI の Dialog
は、カスタムスタイル、アニメーション、およびタイトル領域と標準ボタン用のフッターを含む事前定義された構造で、標準の QtQuick.Controls.Dialog
を拡張します。
基本的なダイアログ
基本的なダイアログは、タイトル、コンテンツ、および標準ボタン(OK、キャンセルなど)で構成されます。コンテンツアイテムは、Dialog
コンポーネントの直接の子として追加されます。

qml
import QtQuick 2.15
import RinUI
// ...
Button {
text: qsTr("Show Basic Dialog")
onClicked: basicDialog.open()
}
Dialog {
id: basicDialog
title: qsTr("Basic Dialog Title")
// modal: true はコンポーネント内で Overlay.modal を使用するためデフォルトです
standardButtons: Dialog.Ok | Dialog.Cancel
// コンテンツアイテムはここに子として追加されます
Text {
text: qsTr("This is the main content of the dialog.")
}
onAccepted: {
console.log("Dialog accepted!");
// OKアクションを実行
}
onRejected: {
console.log("Dialog rejected or closed.");
// キャンセル処理
}
}
カスタムコンテンツ
Dialog
の子として任意の QML コンポーネントを配置して、ダイアログのコンテンツ領域内にカスタムレイアウトとインタラクションを作成できます。これらの子は、Dialog
の内部 contentItem
内の ColumnLayout
に自動的に親子関係が設定されます。

qml
import RinUI // Consistent import
Dialog {
id: customDialog
title: qsTr("Custom Layout")
modal: true // ウィンドウマスクを表示するモーダルダイアログボックス
standardButtons: Dialog.Apply | Dialog.Close // 「適用」と「閉じる」ボタンの使用例
// これらのアイテムは内部 ColumnLayout の子になります
Text {
text: qsTr("Please enter your details below:")
Layout.fillWidth: true // 内部で ColumnLayout が使用されていると仮定
}
TextField { // TextField が別の RinUI コンポーネントまたは標準コンポーネントであると仮定
id: nameField
placeholderText: qsTr("Name")
Layout.fillWidth: true
}
CheckBox { // CheckBox が別の RinUI コンポーネントであると仮定
id: agreeCheck
text: qsTr("I agree to the terms and conditions")
Layout.fillWidth: true
}
}
主なプロパティ
title
:string
- ダイアログのタイトル領域に表示されるテキスト。standardButtons
:Dialog.StandardButtons
(列挙型) - 表示する標準ボタンの組み合わせ(例:Dialog.Ok
、Dialog.Cancel
、Dialog.Yes
、Dialog.No
、Dialog.Apply
、Dialog.Close
)。これらはフッターの内部DialogButtonBox
によって管理されます。modal
:bool
- (継承)true
の場合、ダイアログはアプリケーションの残りの部分との対話をブロックします。RinUI のDialog
はOverlay.modal
を使用しており、これにより効果的にモーダルになります。contentItem
:Item
(読み取り専用) - ダイアログのコンテンツの親となるアイテム(RinUI のDialog
では、これは内部ColumnLayout
です)。Dialog
に直接追加された子アイテムは、自動的にこのcontentItem
に再親子化されます。padding
、topPadding
、bottomPadding
:real
- ダイアログ内のパディングを制御します。すべてデフォルトは 24 です。implicitWidth
:real
- コンテンツと事前定義された最小/最大値(Utils.dialogMinimumWidth
、Utils.dialogMaximumWidth
)に基づいて計算されます。closePolicy
:Popup.ClosePolicy
(列挙型) - ユーザーインタラクションによってダイアログをどのように閉じることができるかを定義します。RinUI のDialog
はデフォルトでPopup.NoAutoClose
です。これは通常、明示的なボタンクリック(OK、キャンセル、またはカスタムクローズボタンなど)またはclose()
、accept()
、reject()
の呼び出しが必要であることを意味します。
メソッド
open()
: ダイアログを表示します。close()
: ダイアログを非表示にします。accept()
またはreject()
が呼び出されない限り、通常はrejected()
を発行します。accept()
: ダイアログを閉じてaccepted()
シグナルを発行します。reject()
: ダイアログを閉じてrejected()
シグナルを発行します。
シグナル
accepted()
: ダイアログが受け入れられたとき(例:OKまたはYesボタンのクリック、またはaccept()
の呼び出し)に発行されます。rejected()
: ダイアログが拒否または閉じられたとき(例:キャンセルまたはNoボタンのクリック、またはreject()
やclose()
の呼び出し)に発行されます。standardButtons
に対応する特定のシグナル(例:applied()
、helpRequested()
)も、ベースのQtQuick.Controls.Dialog
から利用可能です。
スタイルと動作
- 背景とオーバーレイ: ダイアログにはスタイル付きの背景(アクリル色、境界線、角丸)と、モダリティのためのスモーク効果オーバーレイがあります。
- アニメーション: 不透明度とスケールのための
enter
およびexit
トランジションが含まれます。 - フッター:
footer
は、standardButtons
プロパティに基づいて内部DialogButtonBox
によって自動的に設定されます。完全にカスタムのボタン配置が必要な場合は、standardButtons
を避け、カスタムボタンを直接コンテンツとして追加し、それらのonClicked
ハンドラを管理してaccept()
、reject()
、またはclose()
を呼び出す必要があるかもしれません。 - ヘッダー:
header
プロパティはデフォルトでは空のItem
ですが、より複雑なヘッダー領域が必要な場合はカスタムQMLで置き換えることができます(ただし、通常はtitle
で十分です)。