Выпадающий подпункт в меню при нажатии. Разработка под QML
меню, qml, выпадающий пункт меню
Еще раз всем привет.
Обращаюсь скорее по вариантам, советам в подходе к решению вот такой проблемы:
Есть какие-то пункты меню, представляющие из себя:
ColumnLayout { Rectangle { id: menuItem1 Layout.alignment: Qt.AlignCenter Layout.fillWidth: true anchors.top: parent.top height: dp(30) Text { id: textItem1 anchors.fill: parent } MouseArea { anchors.fill: parent onPressed: parent.color = "lightblue" onReleased: parent.color = "red" } } //контент который должен появится при нажатии на пункт меню Rectangle { id: rectMenuContent1 Layout.alignment: Qt.AlignCenter Layout.fillWidth: true anchors.top: menuItem1.bottom Loader { id: loader1 anchors.fill: parent source: "menucontent1.qml" //Подгружаемый внешний файл с пунктами настроек } } // Rectangle { id: menuItem2 Layout.alignment: Qt.AlignCenter Layout.fillWidth: true anchors.margins: dp(3) anchors.top: rectMenuContent1.bottom height: dp(30) Text { id: textItem2 anchors.fill: parent } } Rectangle { id: menuItem3 Layout.alignment: Qt.AlignCenter Layout.fillWidth: true anchors.margins: dp(3) anchors.top: menuItem2.bottom height: dp(30) Text { id: textItem3 anchors.fill: parent } } }
Задача такая, при нажатии на какой-то из пунктов под ним должен появится, сдвигая вниз остальные какой-то контент. В данном случае это rectangle id: rectMenuContent1.
Его я туда поместил только ради демонстрации.
Вопрос: какими возможностями можно добиться такого результата? То есть нажали, пункт раскрылся, снова нажали и все скрылось, и так с каждым. Посоветуйте пожалуйста и если даже есть подобное что-то с примером, то как это можно сделать. Скорее всего тут надо будет что-то с якорями делать. По этому вариант как из урока Евгения с Drawer мне кажется не подходящим. Хотя я могу и ошибаться из-за малых знаний.
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
- Akiv Doros
- Nov. 11, 2024, 2:58 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
- molni99
- Oct. 26, 2024, 1:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
- molni99
- Oct. 26, 2024, 1:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Это неполное решение, но работает.
main.qml
MyItem.qml
listcontroll.zip
А вы пробовали собрать?
И как понять что это не полное решение?
У меня почему то при сборке с этим кодом ошибка [main.o] Error2 вылетает(
мздец
1 способ (без сборки)
Открыть файл ListControll.qmlproject в QtCreator-ре и запустить проект
2 способ (без сборки)
Запустить файл main.qml c помощью qmlscene.exe
например:
d:\temp\Qt\5.6\msvc2015_64\bin\qmlscene.exe main.qml
3 способ
Тот которым пользуетесь вы
[main.o] Error2 никакого отношения к qml не имеет
height: container.visible ? columns.height + 5 : 30
в вашем примере при открытии пункта меню высота идет полная на все, что там находится, то есть все элементы видны. А вот у меня почему-то открывается на +5 высоты.
Controll/one.qml
Controll/two.qml
Controll/three.qml
Чаще всего такая ошибка появляется из-за мусорных недособранных выходных файлов.
Обычно помогает очистка проекта и его пересборка.
Это понятно. Я посмотрел ваш пример, и как написал, что в вашем случае панель подменю раскрывается на высоту того контента, что передается с другого файла. Но у меня при тех же настройках он не открывается настолько.
Ошибка оказалась в том, что я сделал копию каталога с проектом, и в нем оказалась часть названия на русском. Удалил русскую надпись, и все норм стало).
У меня стоял rectangle в котором был ColumnLayout и в нем снова rectangle.
Возможно снова с наследованием и якорями, но убрал родительский первый, и все стало компоноваться нормально.
скорее всего rectangle имеет некорректную высоту.
rectangle.height: ColumnLayout.height
Я немного прикопаюсь, но в данном случае наследования не происходит. Родительский и дочерний объекты здесь подразумеваются в том плане, что дочерний объект вложен в родительский. Это снова отсылка к древовидной json-структуре.