Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
Nov. 1, 2018, 11:54 a.m.

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



10% refund of hotel reservation amount on Booking
10% refund of hotel reservation amount on Booking
We offer a link with a 10% return on the amount of the order when booking a hotel through Booking
9

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

loader_id.item.root_i

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

1

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

0

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

0

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

0

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

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

signal mySignal;

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


0

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

0

А сам 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");



0

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

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

0
  • Nov. 6, 2018, 10:31 a.m.
  • The answer was marked as a solution.

В общем у меня получилось только при помощи динамического создания 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});
1

Comments

Only authorized users can post comments.
Please, Log in or Sign up
N
March 23, 2019, 7:52 a.m.
Nico03

C++ - Test 001. The first program and data types

  • Result:80points,
  • Rating points4
Y
March 22, 2019, 9:39 a.m.
Yavlados

Qt - Test 001. Signals and slots

  • Result:21points,
  • Rating points-10
Last comments
March 22, 2019, 12:32 p.m.
Евгений Легоцкой

Ну может бибилотеки не те положили? У вас сборка для MinGW, а либы для MSVC.
ВН
March 22, 2019, 11:08 a.m.
Волчонок Над-Пропастью

Из кьюта приложение не хочет запускаться, аварийно завершается, но каких-либо ошибок не выдаёт. Оно открывается, после нажатия "старт" зависает и завершается. Если не из кьюта запускать дебаг ...
March 21, 2019, 3:49 p.m.
Евгений Легоцкой

серьезно? Эта ошибка 404 уже даже не относится к данному вопросу. В каких-то urls в вашем проекте. Вопросы, которые не относятся непосредственно к статье, задавайте, пожалуйста на...
АБ
March 21, 2019, 3 p.m.
Артем Бел

а это где? сейчас ошибка в debag такая: Page not found (404)Request Method: GETRequest URL: http://amadowshop.site/accounts/profile/
March 21, 2019, 12:47 p.m.
Евгений Легоцкой

не вижу здесь проблемы, поменяйте url для callback в приложения oauth в социальных сетях https://amadowshop.site/auth/verify/complete/facebook/
Now discuss on the forum
m
March 22, 2019, 7:40 p.m.
monevich

int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); if (argc==2) { w.openFile(argv[1]); } return a.exec();} Допустим...
March 22, 2019, 12:29 p.m.
Дмитрий

Да, мьютекс добавил, но в том потоке, где сигнал вызывается.
ВН
March 22, 2019, 9:04 a.m.
Волчонок Над-Пропастью

Да, на эту проблему! Зато у меня теперь новая, ругается на подключение QMediaPlayer, пишет, что не находит подобного файла или библиотеки. Пока не нашла как исправить, только вариант с переуст...
March 22, 2019, 8:58 a.m.
Михаиллл

4) это , похоже, для создания видоизмененных страниц, для анимации. 3,5) добавить фвйл/qt/ui.qml
March 22, 2019, 8:04 a.m.
Евгений Легоцкой

Привет. Если там std::vector , то наверное можно заранее подготовить вектор с необходимым количеством элементов и просто устанавливать значение по индексу элемента. Но в данном слу...
Join us in social networks

For registered users on the site there is a minimum amount of advertising