1
0

qml: resize menus according to content

This commit is contained in:
Sander van Grieken
2023-11-15 17:35:08 +01:00
parent 4ab973f93d
commit f8eb2e8cf8
2 changed files with 44 additions and 2 deletions

View File

@@ -139,7 +139,8 @@ Item {
color: "#44000000"
}
width: parent.width / 2
property int implicitChildrenWidth: 64
width: implicitChildrenWidth + 60 + constants.paddingLarge
MenuItem {
icon.color: action.enabled ? 'transparent' : Material.iconDisabledColor
@@ -204,6 +205,25 @@ Item {
function deselect() {
currentIndex = -1
}
// determine widest element and store in implicitChildrenWidth
function updateImplicitWidth() {
for (let i = 0; i < menu.count; i++) {
var item = menu.itemAt(i)
var txt = item.text
var txtwidth = fontMetrics.advanceWidth(txt)
if (txtwidth > menu.implicitChildrenWidth) {
menu.implicitChildrenWidth = txtwidth
}
}
}
FontMetrics {
id: fontMetrics
font: menu.font
}
Component.onCompleted: updateImplicitWidth()
}
ColumnLayout {

View File

@@ -39,6 +39,8 @@ ApplicationWindow
property var _exceptionDialog
property QtObject appMenu: Menu {
id: menu
parent: Overlay.overlay
dim: true
modal: true
@@ -46,7 +48,8 @@ ApplicationWindow
color: "#44000000"
}
id: menu
property int implicitChildrenWidth: 64
width: implicitChildrenWidth + 60 + constants.paddingLarge
MenuItem {
icon.color: action.enabled ? 'transparent' : Material.iconDisabledColor
@@ -82,6 +85,25 @@ ApplicationWindow
stack.pushOnRoot(url)
currentIndex = -1
}
// determine widest element and store in implicitChildrenWidth
function updateImplicitWidth() {
for (let i = 0; i < menu.count; i++) {
var item = menu.itemAt(i)
var txt = item.text
var txtwidth = fontMetrics.advanceWidth(txt)
if (txtwidth > menu.implicitChildrenWidth) {
menu.implicitChildrenWidth = txtwidth
}
}
}
FontMetrics {
id: fontMetrics
font: menu.font
}
Component.onCompleted: updateImplicitWidth()
}
function openAppMenu() {