Область видимости QML
Здравствуйте, у меня возникла проблема с видимостью переменных из main.qml в других файлах, у меня stackView находится в main а кнопка, с помощью которой нужно перейти на страницу, находится на странице Page1, и вот на первой картинке показываю: ввожу id StackView и никакой реакции, хотя со страницы SettingsPage доступны все элементы из main и подсвечиваются светло синим (2 картинка), а со всех остальных страниц ничего не доступно, хотелось бы понять почему так и как с этим бороться?
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.Magst du es? In sozialen Netzwerken teilen!
Kommentare
sf
- sdfsdfkp fgskpgokspdog
- 14. Oktober 2024 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Ergebnis:90punkte,
- Bewertungspunkte8
МВ
- Максим Васильев
- 2. Oktober 2024 04:14
Qt - Тест 001. Сигналы и слоты
- Ergebnis:68punkte,
- Bewertungspunkte-1
ЛС
- Лев Семенов
- 30. September 2024 11:04
C++ - Тест 001. Первая программа и типы данных
- Ergebnis:53punkte,
- Bewertungspunkte-4
Letzte Kommentare
ИМ
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5. Oktober 2024 07:51
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5. Februar 2024 01:50
EVA25. Dezember 2023 10:30
Jetzt im Forum diskutieren
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3. Oktober 2024 04:05
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
Кирилл Гусарев27. September 2024 09:09
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
дизайнер не использовал, просто не было варианта без дизайнера, и после создания проекта убрал *.ui из названия, но Page1Form и Page2Form названия не менял.
Добрый день.
Если страницы добавляются динамически в StackView через push, то добавляемые страницы никак не могут спарсится правильно для подсветки кода в QtCreator, поскольку id stackView в этом случае может соответствовать чему угодно, хоть координате на орбите Марса.
Так что, если у вас сама программа работает, то просто забудьте. Это проблема парсинга QML для динамически создаваемых в рантайме объектов. Парсер подсветки синтаксиса никогда не сможет правильно определить соответствие некоторых id в этом случае.
нет, дело не в подсветке, вот на первом фото моё приложение, и там круглая красная кнопка
на втором фото, её описание как round button
и вот на третьем StackView который обьявлен в main, и который доступен почему то только для SettingsPage, все остальные страницы не могут например якоря ставить по id обьектов из других файлов, например у меня topBar в мейне обьявлен,а я хочу список иза Page1Form к его низу заякорить, но сделать этого не могу потому что нет возможности у всех страниц кроме settingsPage использовать обьекты друг друга по их id.
и вот так же с StackView, оно просто недоступно для других страниц, и неизвестно почему. Возможно можно через сигналы-слоты, но не особо понимаю как, возможно stackview инстанцировать, ну а возможно это просто баг, поэтмоу и спросил, ну не может быть такого чтобы не было доступа к внутреннему id обьектов из других файлов.
На самом деле может так быть, что id из других файлов будет недоступен или не будет срабатывать.
Тут ещё другая проблема. Страницы загружаются внутрь stackview и привязывать якорями к объектам вне stackview уже не получится.
У тому же для якорей есть правило, что их можно привязывать либо к parent объектам, либо к sibling объектам. Обычно в таком случае будет следующая ошибка
QML Rectangle: Cannot anchor to an item that isn't a parent or sibling.
Но опять же не всегда. Также скорее всего может быть проблема в рантайме с использованием якорей через id. Например такая проблема есть в следующем коде
Думаю, что у вас подобная ситуация. Страница, которую загружаете в StackView может использовать якоря только внутри самого stackView либо с братскими объектами, которых естественно в stackView нет.
ну с якорями не так остро проблема стоит, хотелось бы узнать как привязать всё же кнопку к StackView который находится в мейне и недоступен странице с кнопкой, либо как то передать этот stackView на страницу с кнопкой, чтобы просто можно было сделать push оттуда
Ну у меня есть мысль насчёт доступа через attached property.
Добавьте в корневой элемент Page1Form.qml id, например id: root
И потом вызывайте в кнопке код следующим образом
Спасибо большое, но я всё же не понимаю почему в qml такое происходит, и почему ни у кого с этим вопросов не возникало, возможно я где то накосячил.
На самом деле вопросы возникают, просто как правило вариации этих вопросов самые разные.
А из SettingsPage есть доступ к StackView потому, что вы SettingsPage прописываете натвердо, без динамического создания в рантайме.
Если бы вы добавляли SettingsPage в StackView через push, то столкнулись бы с такой же проблемой, как и у остальных страниц.
ну у меня SettingsPage пушится из мейна когда нажимаю на три точки сверху и вызываю настройки
ну и если я всё правильно сделал, то всё же не получается добиться переходи на страницу, возможно есть ещё варианты? может как то это сделать через синглтон? может через сигналы слоты? В qt я с ними много работал, но я не уверен есть ли они в qml,
Добавляйте программный код текстом, а не изображением. В тулбаре редатора сообщений есть диалог, который сразу расставит нужную разметку для вставок программного кода.
И у вас в main.qml чёрным по белому написан такой код
Не вижу никакого push в stackView в том, что вы привели в сообщениях.
Я понял, я сделал в мейне так:
И всё стало доступно в Page1Form, аж стыдно что так долго выяснял в чём проблема, ну может кому то полезно будет, спасибо большое за помощь.
В данном случае SettingsPage и Page1Form будут sibling объектами относительно stackView.
Просто StackView их перекрывает, поскольку объявлен позже.
Предполагаю, что у вас могут начаться проблемы при выполнении pop() . Объекты будут убираться из StackView, но не уничтожаться... Даже и не знаю, как поведёт QML себя в этом случае. Один чёрт, такой подход так себе.
пока у меня 4 страницы, проблем не возникает, если всё же возникнут, отпишу сюда что способ не рабочий, пока что не вижу просто других, если что найду получше, тоже отпишу.
Да, вы были правы, stackview просто перекрывает страницы, и они висят позади, когда мне из addingPage нужно было передать данные по нажатию кнопки, чтобы динамически создать строку с занятием, я так же обьявил в AddingPage Page1Form и увидел что эти страницы просто смешались, поэтому такой подход не имеет места быть.
похоже нашёл решение в моём случае оно выглядит так
так же ссылка откуда взял это:
https://doc.qt.io/qt-5/qml-qtquick-controls2-stackview.html#item-ownership