3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
1

Как добавить элементы в model со списка list через метод

22.10.2012, 17:23. Показов 3573. Ответов 8
Метки нет (Все метки)

Есть список:
C++ (Qt)
1
2
//cpp
QList<SomeType> list;
И есть модель:
C++ (Qt)
1
2
3
4
//qml
ListModel {
     id: model     
}
Надо добавить элементы в model со списка list через метод.
То есть понятно что надо использовать model.append({/**/}).
Но как это можно сделать?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2012, 17:23
Ответы с готовыми решениями:

Как из списка List<double> добавить элементы в DataGrid? MVVM
Есть список который содержит вещественные числа. Нужно эти числа добавить с DataGrid.

Как добавить элементы одного List к другому List
public class groupIndicators { public string Name { get; set; } //Наименование группы...

Как добавить элементы в конец, начало, середину list?
list&lt;int&gt; m;

Как добавить и вывести элементы из List<int, string> ?
В инете нашёл инфу только по обычным спискам (одного типа). Помогите, как в такой список добавить...

8
1441 / 1322 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
22.10.2012, 17:41 2
Как юзать моделки смотри тут.
А append() придется делать самому.
C++ (Qt)
1
2
3
4
5
class MyModel//....
{
 public:
 Q_INVOKABLE  void append(/*....*/);
}
1
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
23.10.2012, 20:54  [ТС] 3
Вообщем, я решил сделать через сигнал-слот, но тут тоже проблема появилась.

Есть модель и ListView отдельном файле qml:
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
Item {
    width: 471; height: 245
 
    ListModel {
        id: studentListModel
        ListElement{}
    }
 
    Component {
        id: delegate
        StudentDelegate {
            name:          model.name
            last_name:     model.last_name
            phone:         model.phone
            average_point: model.average_point
        }
    }
 
    ListView {
        delegate: delegate
        model: studentListModel
        anchors.fill: parent
        spacing: 5
    }
    
    function addElement (name, last_name, phone, average_point)
    {
        studentListModel.append({"name": name, "last_name": last_name, "phone": phone, "average_point": average_point})
    }
}

Определен сигнал для функции addElement указанной выше:
C++ (Qt)
1
void data_send_signal(QVariant name, QVariant last_name, QVariant phone, QVariant average_point);
Определен QObject и QDeclarativeView:
C++ (Qt)
1
2
QDeclarativeView *ui;
QObject *Root;
В конструкторе главного класса подключается qml и соединяется сигнал со слотом:
C++ (Qt)
1
2
3
4
5
6
7
8
ui = new QDeclarativeView;
ui->setSource(QUrl("qrc:/main.qml"));
setCentralWidget(ui);
ui->setResizeMode(QDeclarativeView::SizeRootObjectToView);
Root = ui->rootObject();
ui->rootContext()->setContextProperty("window", this);
QObject::connect(this , SIGNAL(data_send_signal(QVariant,QVariant,QVariant,QVariant)),
                     Root, SLOT(addElement(QVariant, QVariant, QVariant, QVariant)));
Далее вызываю сигнал, все компилится, запускается, а в итоге слот не вызывается и не работает так как надо.

Вот ошибки которые пишет:
qrc:/StudentsModelView.qml:15: Unable to assign [undefined] to QString name
qrc:/StudentsModelView.qml:17: Unable to assign [undefined] to QString phone
qrc:/StudentsModelView.qml:18: Unable to assign [undefined] to double average_point
qrc:/StudentsModelView.qml:16: Unable to assign [undefined] to QString last_name
qrc:/WorkPage.qml:17: Unable to assign QObject* to QDeclarativeAnchorLine
qrc:/StartFlippableScreen2.qml:23: Unable to assign QObject* to QDeclarativeAnchorLine
qrc:/StudentsModelView.qml:15: Unable to assign [undefined] to QString name
qrc:/StudentsModelView.qml:17: Unable to assign [undefined] to QString phone
qrc:/StudentsModelView.qml:18: Unable to assign [undefined] to double average_point
qrc:/StudentsModelView.qml:16: Unable to assign [undefined] to QString last_name
qrc:/WorkPage.qml:17: Unable to assign QObject* to QDeclarativeAnchorLine
qrc:/StartFlippableScreen2.qml:23: Unable to assign QObject* to QDeclarativeAnchorLine

Object::connect: No such slot QDeclarativeFlipable::addElement(QVariant, QVariant, QVariant, QVariant)

Неясно в чем ошибка.
0
1441 / 1322 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
24.10.2012, 00:30 4
Кто сказал, что так можно делать? Using QML Bindings in C++ Applications
0
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
24.10.2012, 18:55  [ТС] 5
инфу я отсюда взял http://easy-qt.blogspot.com/2012/02/qt-qml.html.
0
1441 / 1322 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
25.10.2012, 10:39 6
Цитата Сообщение от Penoplast Посмотреть сообщение
инфу я отсюда взял http://easy-qt.blogspot.com/2012/02/qt-qml.html.
Ты же сам видишь, что не работает
0
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
25.10.2012, 11:25  [ТС] 7
Дык вот работало, когда я испытывал это отдельно в main.qml, а когда вынес в отдельный модуль он просто не увидел слот.
0
1441 / 1322 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
25.10.2012, 11:42 8
Цитата Сообщение от Penoplast Посмотреть сообщение
Дык вот работало, когда я испытывал это отдельно в main.qml, а когда вынес в отдельный модуль он просто не увидел слот.
Многофайловость и иерархическая структура особенность реальных проектов ,
Есть предположение, что objectName в QML и findChild(по objectName) в C++ может помочь.
1
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
26.10.2012, 22:27  [ТС] 9
Ваше предположение оказалось верным, спасибо вам большое за помощь.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2012, 22:27

Как в List<Item> добавить элементы так, чтобы значение пересчитывалось построчно?
как в List&lt;Item&gt; добавить элементы так чтобы значение пересчитывалось построчно допустим сумма...

Как добавить элементы списка в массив?
Добрый вечер. Прошу помощи, необходимо вводимые элементы списка одновременно добавлять в массив. ...

Вывести элементы списка в таком же виде как и через print, но через return?
Как вывести элементы списка в таком же виде как и через print,но только через return? def...

Как добавить в конец многомерного списка строку через append?
Здравствуйте , подскажите как добавить в конец списка строку , нужно добавить ip адрес и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru