diff options
6 files changed, 88 insertions, 1 deletions
diff --git a/src/quickcontrols2/basic/DialogButtonBox.qml b/src/quickcontrols2/basic/DialogButtonBox.qml index 0d8475865a..4ac4f29070 100644 --- a/src/quickcontrols2/basic/DialogButtonBox.qml +++ b/src/quickcontrols2/basic/DialogButtonBox.qml @@ -58,6 +58,7 @@ T.DialogButtonBox { } contentItem: ListView { + implicitWidth: contentWidth model: control.contentModel spacing: control.spacing orientation: ListView.Horizontal diff --git a/src/quickcontrols2/fusion/DialogButtonBox.qml b/src/quickcontrols2/fusion/DialogButtonBox.qml index d54e03ae47..9282876221 100644 --- a/src/quickcontrols2/fusion/DialogButtonBox.qml +++ b/src/quickcontrols2/fusion/DialogButtonBox.qml @@ -58,6 +58,7 @@ T.DialogButtonBox { delegate: Button { } contentItem: ListView { + implicitWidth: contentWidth model: control.contentModel spacing: control.spacing orientation: ListView.Horizontal diff --git a/src/quickcontrols2/imagine/DialogButtonBox.qml b/src/quickcontrols2/imagine/DialogButtonBox.qml index 3edaec93fa..d9891e0bb3 100644 --- a/src/quickcontrols2/imagine/DialogButtonBox.qml +++ b/src/quickcontrols2/imagine/DialogButtonBox.qml @@ -68,6 +68,7 @@ T.DialogButtonBox { } contentItem: ListView { + implicitWidth: contentWidth model: control.contentModel spacing: control.spacing orientation: ListView.Horizontal diff --git a/src/quickcontrols2/material/DialogButtonBox.qml b/src/quickcontrols2/material/DialogButtonBox.qml index a5b2ac573c..9828338b14 100644 --- a/src/quickcontrols2/material/DialogButtonBox.qml +++ b/src/quickcontrols2/material/DialogButtonBox.qml @@ -62,6 +62,7 @@ T.DialogButtonBox { delegate: Button { flat: true } contentItem: ListView { + implicitWidth: contentWidth model: control.contentModel spacing: control.spacing orientation: ListView.Horizontal diff --git a/src/quickcontrols2/universal/DialogButtonBox.qml b/src/quickcontrols2/universal/DialogButtonBox.qml index b5934290b1..dc6da731f9 100644 --- a/src/quickcontrols2/universal/DialogButtonBox.qml +++ b/src/quickcontrols2/universal/DialogButtonBox.qml @@ -61,6 +61,7 @@ T.DialogButtonBox { } contentItem: ListView { + implicitWidth: contentWidth model: control.contentModel spacing: control.spacing orientation: ListView.Horizontal diff --git a/tests/auto/quickcontrols2/controls/data/tst_dialogbuttonbox.qml b/tests/auto/quickcontrols2/controls/data/tst_dialogbuttonbox.qml index 11cc1f55b2..7d4c5d9e4d 100644 --- a/tests/auto/quickcontrols2/controls/data/tst_dialogbuttonbox.qml +++ b/tests/auto/quickcontrols2/controls/data/tst_dialogbuttonbox.qml @@ -398,7 +398,7 @@ TestCase { // QTBUG-72886 function test_changeCustomButtonText(data) { - var control = createTemporaryObject(customButtonBox, testCase, {}) + var control = createTemporaryObject(data.component, testCase, {}) verify(control) var listView = control.contentItem @@ -418,6 +418,88 @@ TestCase { } Component { + id: customButtonBoxInDialog + + Dialog { + width: 300 + visible: true + + footer: DialogButtonBox { + objectName: "customButtonBoxInDialog" + alignment: Qt.AlignRight + + property alias okButton: okButton + + Button { + id: okButton + text: "OK" + + DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole + } + } + } + } + + Component { + id: customButtonBoxTwoButtonsInDialog + + Dialog { + width: 300 + visible: true + + footer: DialogButtonBox { + objectName: "customButtonBoxTwoButtonsInDialog" + alignment: Qt.AlignRight + + property alias okButton: okButton + + Button { + id: okButton + text: "OK" + + DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole + } + Button { + text: "Cancel" + + DialogButtonBox.buttonRole: DialogButtonBox.RejectRole + } + } + } + } + + function test_changeCustomButtonImplicitWidth_data() { + return [ + { tag: "oneButton", component: customButtonBoxInDialog }, + { tag: "twoButtons", component: customButtonBoxTwoButtonsInDialog }, + ] + } + + // QTBUG-102558 + function test_changeCustomButtonImplicitWidth(data) { + let dialog = createTemporaryObject(data.component, testCase, {}) + verify(dialog) + + let control = dialog.footer + verify(control) + + let listView = control.contentItem + waitForRendering(listView) + + let button = control.okButton + verify(button) + button.implicitWidth *= 1.5 + + // The button should never go outside of the box. + tryVerify(function() { return button.mapToItem(control, 0, 0).x >= 0 }, + 1000, "Expected left edge of button to be within left edge of DialogButtonBox (i.e. greater than or equal to 0)" + + ", but it's " + button.mapToItem(control, 0, 0).x) + tryVerify(function() { return button.mapToItem(control, 0, 0).x + button.width <= control.width }, + 1000, "Expected right edge of button to be within right edge of DialogButtonBox (i.e. less than or equal to " + + control.width + "), but it's " + (button.mapToItem(control, 0, 0).x + button.width)) + } + + Component { id: noRolesDialog Dialog { |