alex_lip
alex_lipҚар. 1, 2018, 7:54 Т.Ж.

Как открыть 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 доступ есть.



Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

9
Evgenii Legotckoi
  • Қар. 1, 2018, 8:02 Т.Ж.

Если root_i живёт внутри объекта Loader, то скорее всего нужно будет так пытаться достучаться.

loader_id.item.root_i

Хотя я бы парентом для диалога сделал окно приложения, а в нём использовал бы set метод и установил бы нужную в него информацию.

    alex_lip
    • Қар. 1, 2018, 8:17 Т.Ж.

    ====а в нём использовал бы set метод и установил бы нужную в него информацию.==== -  можно поподробнее

      Виталий Антипов
      • Қар. 1, 2018, 10:34 Т.Ж.

      Я обычно делаю все необходимые popup-окна, у которых родителем окно приложения. Из ListView вызываю методом open(), как в примере документации.

        alex_lip
        • Қар. 2, 2018, 1:43 Т.Ж.

        а как вы туда параметры передаете, если вызов происходит где-то из глубины на несколько  уровней объектов?

          Evgenii Legotckoi
          • Қар. 2, 2018, 6:25 Т.Ж.

          каким-то образом вытаскивать сигналами вызов

          в QML тоже можно прописать сигнал

          signal mySignal;

          Также и с параметрами возможно прописать сигнал.


            Виталий Антипов
            • Қар. 2, 2018, 9:56 Т.Ж.

            Храню параметры как свойства окна приложения (типа глобальных переменных). Они доступны и из делегата и из popup, при клике на элемент ListView присваиваю им необходимые значения, открываю popup. В нем, например, делаю какие-то действия, на стороне с++ через сигнал-слот обрабатываю, обновляю модель (например при редактировании бд).

              alex_lip
              • Қар. 6, 2018, 12:56 Т.Ж.

              А сам popup на каком уровне(где) описываете. У меня он из ListView виден только если он на уровне ListView описан. Причем как

              var popup1 = Qt.createQmlObject(
              'import QtQuick 2.10; import QtQuick.Controls 2.3;
              Dialog
              {
                  id: popup;
                  x: 10; y: 10;
                  width:500;
                  height: 500;
                  focus: true;
                  visible: false
                  Text
                  {
              ........
              
              ,
                               loader,"DynamicPopup");



                alex_lip
                • Қар. 6, 2018, 2:52 Т.Ж.

                ==Храню параметры как свойства окна приложения (типа глобальных переменных).==

                У меня они недоступны. Основное окно - вызывает loader - затем в лоадере сидит внешний файл(через импорт) - там уже в итемсе находится листвью. И из делегата этого ListView  неполучается достучаться к property главного окна приложения. Если только через сигнал слот из слоя C++

                  alex_lip
                  • Қар. 6, 2018, 5:31 Т.Ж.
                  • Жауап шешім ретінде белгіленді.

                  В общем у меня получилось только при помощи динамического создания popup. В этом случае подхватывается все  - и модель и "глобальные" property


                  seaPhones.clear();
                  
                   seaPhones.append
                   seaPhones.append
                   seaPhones.append
                  
                     component = Qt.createComponent("../content/MyPopup.qml");
                      myDialog = component.createObject(root_i, {"x": 10, "y": 10, "opacity" :1, "visible": true});

                    Пікірлер

                    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                    Кіріңіз немесе Тіркеліңіз
                    AD

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Нәтиже:50ұпай,
                    • Бағалау ұпайлары-4
                    m
                    • molni99
                    • Қаз. 26, 2024, 1:37 Т.Ж.

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Нәтиже:80ұпай,
                    • Бағалау ұпайлары4
                    m
                    • molni99
                    • Қаз. 26, 2024, 1:29 Т.Ж.

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Нәтиже:20ұпай,
                    • Бағалау ұпайлары-10
                    Соңғы пікірлер
                    ИМ
                    Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                    Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                    Evgenii Legotckoi
                    Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                    A
                    ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                    Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                    ИМ
                    Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                    d
                    dblas5Шілде 5, 2024, 11:02 Т.Ж.
                    QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                    Енді форумда талқылаңыз
                    m
                    moogoҚар. 22, 2024, 7:17 Т.Ж.
                    Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
                    Evgenii Legotckoi
                    Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                    добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                    t
                    tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                    google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                    NSProject
                    NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                    Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

                    Бізді әлеуметтік желілерде бақылаңыз