Как открыть popup окно из делегата ListView
Собственно subj. Оказалось не так все просто.
Есть LIstView - внутри делегата есть mousearea в которой по клик - есть функция. Внутри должно сформироваться или вызваться окно(или диалог)
function vibor() { var popup1 = Qt.createQmlObject('import QtQuick 2.10; import QtQuick.Controls 2.3; Popup { id: popup; x: 100; y: 100; width: 200; height: 300; modal: true; focus: true; closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent; visible: false }', root_i, "DynamicPopup"); popup1.open();
Окошко открывается - но вываливается ошибка
QQmlContext: Cannot set context object on invalid context.
QQmlComponent: Cannot create a component in an invalid context
Я так понимаю это из-за привязки к root_i . Это у меня итем верхнего уровня, но он сам грузится через loader.
Когда я пытаюсь создать диалог на уровне root_i и затем вызвать его из делегата ListView через root_i.dialog.open() - ругается , что root_i не определен. Хотя к проперти уровня root_i доступ есть.
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
Если root_i живёт внутри объекта Loader, то скорее всего нужно будет так пытаться достучаться.
loader_id.item.root_i
Хотя я бы парентом для диалога сделал окно приложения, а в нём использовал бы set метод и установил бы нужную в него информацию.
====а в нём использовал бы set метод и установил бы нужную в него информацию.==== - можно поподробнее
Я обычно делаю все необходимые popup-окна, у которых родителем окно приложения. Из ListView вызываю методом open(), как в примере документации.
а как вы туда параметры передаете, если вызов происходит где-то из глубины на несколько уровней объектов?
каким-то образом вытаскивать сигналами вызов
в QML тоже можно прописать сигнал
Также и с параметрами возможно прописать сигнал.
Храню параметры как свойства окна приложения (типа глобальных переменных). Они доступны и из делегата и из popup, при клике на элемент ListView присваиваю им необходимые значения, открываю popup. В нем, например, делаю какие-то действия, на стороне с++ через сигнал-слот обрабатываю, обновляю модель (например при редактировании бд).
А сам popup на каком уровне(где) описываете. У меня он из ListView виден только если он на уровне ListView описан. Причем как
==Храню параметры как свойства окна приложения (типа глобальных переменных).==
У меня они недоступны. Основное окно - вызывает loader - затем в лоадере сидит внешний файл(через импорт) - там уже в итемсе находится листвью. И из делегата этого ListView неполучается достучаться к property главного окна приложения. Если только через сигнал слот из слоя C++
В общем у меня получилось только при помощи динамического создания popup. В этом случае подхватывается все - и модель и "глобальные" property