Выпадающий подпункт в меню при нажатии. Разработка под 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 мне кажется не подходящим. Хотя я могу и ошибаться из-за малых знаний.
Do you like it? Share on social networks!
- Last passed tests
- АПMarch 9, 2025, 9:16 p.m.
- Last comments
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
- Now discuss on the forum
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Это неполное решение, но работает.
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-структуре.