
Выпадающий подпункт в меню при нажатии. Разработка под 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 мне кажется не подходящим. Хотя я могу и ошибаться из-за малых знаний.

Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Unknown akadamn
- 24 января 2025 г. 17:14
Qt - Тест 001. Сигналы и слоты
- Результат:84баллов,
- Очки рейтинга4
- Unknown akadamn
- 24 января 2025 г. 16:22
Qt - Тест 001. Сигналы и слоты
- Результат:42баллов,
- Очки рейтинга-8


Это неполное решение, но работает.
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-структуре.