Область видимости QML
Здравствуйте, у меня возникла проблема с видимостью переменных из main.qml в других файлах, у меня stackView находится в main а кнопка, с помощью которой нужно перейти на страницу, находится на странице Page1, и вот на первой картинке показываю: ввожу id StackView и никакой реакции, хотя со страницы SettingsPage доступны все элементы из main и подсвечиваются светло синим (2 картинка), а со всех остальных страниц ничего не доступно, хотелось бы понять почему так и как с этим бороться?
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
AD
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
m
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
m
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Останні коментарі
ИМ
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 листопада 2024 р. 11:51
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 07:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi24 червня 2024 р. 15:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 листопада 2024 р. 06:04
NSProject04 червня 2022 р. 03:49
IscanderChe31 жовтня 2024 р. 15:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
дизайнер не использовал, просто не было варианта без дизайнера, и после создания проекта убрал *.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