83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Передача указателя на массив в качестве параметра функции в QML21.02.2016, 18:14. Показов 3945. Ответов 13
Доброго времени суток.
Имеется следующая система - в Qml приложении есть два элемента: Text{} и Button{}. По нажатию на кнопку в C++ слот посылается целое число. В С++ создаётся массив элементов размера переданного числа и заполняется случайными целыми числами. После заполнения массив передаётся через сигнал обратно в Qml и нулевой элемент массива выводится в Text{}(чего не происходит и в консоль выдаётся Cannot read property '0' of undefined). В сигнальной функции в качестве параметра используется указатель на массив, но я не уверен как правильно обозначить этот параметр в Connections{}(думаю, что ошибка именно тут). Вот код: customClasses.h
main.cpp
dataProcessing.cpp
main.qml
0
|
21.02.2016, 18:14 | |
Ответы с готовыми решениями:
13
Передача указателя на функцию в качестве параметра Передача параметра из .cpp в .qml Использование функции в качестве параметра Передача указателя на структуру в качестве параметра функции |
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
|
|
21.02.2016, 19:48 [ТС] | 3 |
Wyn, а если я передаю прямо в js функцию, в качестве параметра, то типы QML всё равно будут иметь значение?
0
|
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
|
|
21.02.2016, 19:50 [ТС] | 5 |
Wyn, в JS есть только ссылки, афаик.
Добавлено через 36 секунд То есть никак, я правильно понимаю? Как тогда лучше сделать? Записать в строку и передавать строку?
0
|
21.02.2016, 20:00 | 6 |
http://doc.qt.io/qt-5/qtqml-cp... -data.html
Certain C++ sequence types are supported transparently in QML as JavaScript Array types. In particular, QML currently supports: QList<int> ... Ещё вопросы?
0
|
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
|
|
21.02.2016, 20:05 [ТС] | 7 |
Wyn, да, извините, но я пока что не совсем понял. Если я не передаю в QML указатель на массив, то что я передаю? И как что я это принимаю?
0
|
21.02.2016, 20:26 | 8 | ||||||||||
Сообщение было отмечено inviter42 как решение
Решение
Следующие две строки из ссылки выше:
There are two ways in which such sequences can be exposed to QML: as a Q_PROPERTY of the given sequence type; or as the return type of a Q_INVOKABLE method. Как реализовывается обмен данными между c++ и QML: http://doc.qt.io/qt-5/qtqml-cp... butes.html Так что, к примеру, можешь передавать свойство(property);
И в QML это свойство принимать:
1
|
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
|
|
22.02.2016, 16:08 [ТС] | 9 |
Wyn, отлично, спасибо. Завтра постараюсь покурить доки и разобраться в этом на свежую голову.
Добавлено через 19 часов 42 минуты Wyn, я стал разбираться с кодом, который вы написали и у меня появился ещё вопрос - а это нормально, что в макросе Q_PROPERTY не указан аксессор WRITE для метода setOutput?
0
|
22.02.2016, 17:59 | 10 |
Да. Это будет read-only property.
Почему сразу? Там может быть всё что угодно. Просто setOutput принимает только QList <int>, следовательно туда вы должны передавать QList <int>. А то, как создан этот QList <int> - дело десятое.
1
|
83 / 2 / 2
Регистрация: 27.11.2015
Сообщений: 163
|
||||||
22.02.2016, 18:13 [ТС] | 11 | |||||
То есть мы может преспокойно создать массив типа int в receiveFromQml, преобразовать его в QList <int> и скормить в качестве параметра для setOutput и он его преспокойно проглотит, верно?
Добавлено через 4 минуты И да, хотелось бы ещё уточнить - при вызове метода setOutput в receiveFromQml он вызывается как обычная функция, только в пространстве имён DataExchange, я правильно понимаю? То есть что-то такое:
0
|
22.02.2016, 19:49 | 12 | |||||
Конечно.
Всмысле? setOutput - это функция-член класса DataExchange. Следовательно и работать с ней надо как с функцией-членом класса. Тк receiveFromQml и setOutput относятся к одному классу, то можно просто вызывать её как обычную функцию -
1
|
inviter42
|
22.02.2016, 19:56
[ТС]
#13
|
Не по теме: Я бы сказал, что вы правы дважды - вы не знаете какая интересная ситуация у меня сложилась, которая вынуждает меня лезть в qml, не до конца разобравшись с основами C++(что меня, к слову, не радует, потому что я люблю, чтобы всё было разложено по полочкам). И вы правы в том, что мне нужно изучить основы сначала. Но я сильно ограничен во времени, которое у меня есть, чтобы выполнить нужные задания и не могу просто сесть, открыть учебник по С++ и начать его читать и выполнять примеры оттуда. Увы. :(
0
|
23.02.2016, 07:50 | 14 |
0
|
23.02.2016, 07:50 | |
23.02.2016, 07:50 | |
Помогаю со студенческими работами здесь
14
Передача указателя в качестве параметра функции динамически подключаемой библиотеки .so Передача указателя на объект как параметра функции Передача функции в качестве параметра Передача функции в качестве параметра Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |