Форум программистов, компьютерный форум, киберфорум
QML
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
6 / 2 / 4
Регистрация: 24.01.2017
Сообщений: 124
1

Использование DelegateModel

20.10.2020, 08:18. Просмотров 1887. Ответов 6
Метки нет (Все метки)

Пробую DelegateModel. Не работает! Что не так?

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Window {
    width: 360
    height: 360
    visible: true
 
    Column {
        anchors.margins: 10
        anchors.fill: parent
        spacing: 10
 
        GridView {
            id: view
            width: parent.width
            height: parent.height - button.height - parent.spacing
            model: dataModel
 
            DelegateModel {
                id: dataModel
                model: ListModel {
                    //id: dataModel
                }
 
                delegate: Rectangle {
 
                    width: 40
                    height: 40
                    color: "skyblue"
 
                    Text {
                        anchors.centerIn: parent
                        text: model.index
                    }
                    MouseArea {
                        anchors.fill: parent
                        onClicked: dataModel.remove(model.index)
                    }
                }
            }
        }
 
        Rectangle {
            id: button
            width: 100
            height: 40
            anchors.horizontalCenter: parent.horizontalCenter
            border {
                color: "black"
                width: 1
            }
 
            Text {
                anchors.centerIn: parent
                renderType: Text.NativeRendering
                text: "Add"
            }
 
            MouseArea {
                anchors.fill: parent
                onClicked: dataModel.append({})
            }
        }
    }
}
Добавлено через 11 минут
Процесс завершется с кодом -1 и ничего не отображается.

Добавлено через 5 минут
Чувствую, что не правильно написал. Как правильно, не поможете?

Добавлено через 5 минут
Пока не надо отвечать. Разбираюсь сам.

Добавлено через 14 минут
Не запускалось из-за того что не написал import QtQml.Models 2.2.

Теперь запускается, но кнопка (Rectangle) не работает.

Пробовал вынести DataModel из грида, не помогает.

Я пас. Помогите, пожалуйста, разобраться.

Добавлено через 50 минут
Пишет ошибку при нажатии на кнопку:

TypeError: Property 'append' of object QQmlDelegateModel(0x2586fb0) is not a function

В чём дело? Да, нет ни свойства, ни функции append. Как так?

Вот так надо: dataModel.model.append({}).
Разобрался.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2020, 08:18
Ответы с готовыми решениями:

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя.
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между...

Создание и использование своих @NamedQueries. Использование EntityManager
Добрый день! Создавал классы сущностей и сессий через NetBeans генераторы кода. Использование...

Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr
NET Framework. Программа для поиска простых чисел среди чисел Фибоначчи. При нахождении...

Использование строк.Использование структур
Задачка: Дана строка,состоящая из групп нулей и едениц. Найти и вывести на экран группы с нечетным...

6
Модератор
Эксперт .NET
5303 / 4098 / 1182
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
20.10.2020, 08:24 2
Цитата Сообщение от MatrixKiller Посмотреть сообщение
Пробую DelegateModel. Не работает! Что не так?
Не совсем понимаю о чем вы. Судя по коду, вы пытаетесь повторить второй пример из нулевой главы, так? Тогда вот этот пример в коде. Так работает.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import QtQuick 2.12
import QtQuick.Window 2.12
 
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    Rectangle{
        anchors.fill: parent;
 
        ListModel{
            id: dataModel;
        }
        Column{
            anchors.fill: parent;
            anchors.margins: 10;
            spacing: 10;
            clip: true;
 
            ListView{
                id: view;
                width: parent.width;
                height: parent.height-button.height-parent.spacing;
                spacing: 10;
                clip: true;
 
                model: dataModel
                delegate: Rectangle{
                    width: view.width;
                    height: 40;
                    color: "skyblue";
 
                    Text{
                        anchors.centerIn: parent;
                        renderType: Text.NativeRendering;
                        text: model.index;
                    }
                }
            }
 
            Rectangle{
                id: button;
                width: 100;
                height: 40;
                anchors.horizontalCenter: parent.horizontalCenter;
                border{
                    color: "black";
                    width: 1;
                }
                radius: 5;
 
                Text{
                    anchors.centerIn: parent;
                    renderType: Text.NativeRendering;
                    font.pointSize: 15;
                    text: "ADD";
                }
 
                MouseArea{
                    anchors.fill: parent;
                    onClicked: {
                        dataModel.append({});
                    }
                }
            }
        }
    }
}
0
6 / 2 / 4
Регистрация: 24.01.2017
Сообщений: 124
20.10.2020, 08:43  [ТС] 3
C DelegateModel балуюсь. Чё-то хотел с ним сделать. Пока потерял нить, нужен ли он.
0
Модератор
Эксперт .NET
5303 / 4098 / 1182
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
20.10.2020, 08:44 4
Цитата Сообщение от MatrixKiller Посмотреть сообщение
Пока потерял нить, нужен ли он.
Я его не применял, не было необходимости.
0
6 / 2 / 4
Регистрация: 24.01.2017
Сообщений: 124
20.10.2020, 09:27  [ТС] 5
Я его не применял, не было необходимости.
Хочу сделать вложенные модели-представления.
Например, для фалового менеджера: GridView-ListModel { TreeView-FileSystemModel }.
И вот, по-моему, тут DelegateModel и пригодится. Не знаю, пока, можно ли без него обойтись. С ним как-то логичнее получается.
Не делал вложенные модели-представления? Это возможно?
0
Модератор
Эксперт .NET
5303 / 4098 / 1182
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
20.10.2020, 09:46 6
Цитата Сообщение от MatrixKiller Посмотреть сообщение
Не делал вложенные модели-представления? Это возможно?
Не делал, но думаю как-то это сделать можно. К примеру в модели есть список, его передавать в делегат и в делегате отрисовывать.
0
6 / 2 / 4
Регистрация: 24.01.2017
Сообщений: 124
20.10.2020, 13:11  [ТС] 7
insite2012, ок, попробую. Для начала через DelegateModel.

Добавлено через 2 часа 1 минуту
Вот, сделал так:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQml.Models 2.15
 
Window {
    width: 360
    height: 360
    visible: true
 
    Column {
        anchors.margins: 10
        anchors.fill: parent
        spacing: 10
 
            ListModel {
                id: visualModel
                ListElement { name: "Apple" }
                //ListElement { name: "Orange" }
            }
 
        GridView {
            id: view
            width: parent.width
            height: parent.height - button.height - parent.spacing
            model: DelegateModel {
                id: dataModel
                model: ListModel {
                    //id: dataModel
                }
 
                delegate: ListView {
                            anchors.fill: parent
                            model: visualModel
                            delegate: Rectangle {
                                Text { text: "Name: " + name}
                            }
                        }
            }
        }
 
        Rectangle {
            id: button
            width: 100
            height: 40
            anchors.horizontalCenter: parent.horizontalCenter
            border {
                color: "black"
                width: 1
            }
 
            Text {
                anchors.centerIn: parent
                renderType: Text.NativeRendering
                text: "Add"
            }
 
            MouseArea {
                anchors.fill: parent
                onClicked: dataModel.model.append({})
            }
        }
    }
}
Работает, но не совсем.
Почему-то все элементы лепятся в левый верхний угол экрана, а не так как я хотел: в грид.
Почемуможет быть такое?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2020, 13:11

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Использование функций, использование break
Здравствуйте. Не знал как назвать тему, боялся что, если назову "КАК ЭТО РАБОТАЕТ?" то её удалят....

Использование конструкторов. Перегрузка конструкторов. Использование свойств
Помогите реализовать свойства, позволяющие осуществить проверку на допустимые значения для данных...

Множественное наследование, Перегрузка функций, Перегрузка операторов, Использование дружественных функций и классов, Использование шаблонов классов
Здравствуйте!!! Я бы хотел попросить помоч решить...ну или скинуть примеры таких задач, если вдруг...

Использование if else
Используя if..else, проанализировать и вывести на экран состояния флажков в своей форме анкеты

использование IF в WHERE
допустип в форме поиска выбирается (или не выбирается) параметр Автостоянка. Елси он выбирается то...

Использование *u8
Уважаемые Гуру! Увидел строку на С u8 *loc; // адрес u8 - тип данных, который занимает 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.