Nov. 19, 2019, 5:11 a.m.

Проблема передачи из qml агрументом в C++ метод обьекта

Всем привет.
Столкнулся со странностью приема в качестве аргументам обьекта что передается из qml.
Создаю контекст в main.cpp

pContext->setContextProperty("GroupManager", wrapperManager->wrapper(server->groupManager()));

После в qml я вызываю у данного обьекта метод и передаю туда другйо обьект. Перед передачей я для проверки вызвал у данного обьекта другйо метод и выпил сделал, все норм.
Но вот когда передаю в нужный метод обьект то уже на С++ стороне прилетает пустйо обьект и валистя прога.
ВОт так выглядит ошибка

"Could not convert argument 0 at"
     "onClicked@qrc:/qml/NetworkPage.qml:366"
"Passing incompatible arguments to C++ functions from JavaScript is dangerous and deprecated."
"This will throw a JavaScript TypeError in future releases of Qt!"
Segmentation fault received, exiting

Данная ошибка валится из данного qt файла
qt
Строка 1269
Может кто-то посоветовать с данной проблемой?
Не понимаю почему так происходит.
Спасибо большое.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
6

Привет.
Недостаточно иноформации.
Нужно описание метода в C++, а также код, вызывающий метод в QML

Так выглядит код в qml

TextButton
{
  label: "DONE"
  height: 88
  width: 221
  enabled: rightCol.repeater.count > 0

  onClicked:
  {
    console.log("grp: ", fakeGroup.name)    //тут выпил в консоль, выписывается то что и должно передатся в метод
    GroupManager.createNewGroup(fakeGroup);
    networkPage.state = escButton.prevState;
  }
}

А это метод что в C++ вызывается

...
public:
    explicit GroupManager(QObject *parent = 0);

    Q_INVOKABLE void createNewGroup(qmlfakegroup *grp);

...
void GroupManager::createNewGroup(qmlfakegroup *grp)
{
    qDebug() << "createNewGroup: " << grp->objectName().data(); // тут происходит сегментешен фолт, аргумент пустой

Попробуй переписать метод так

Q_INVOKABLE void createNewGroup(QObject *grp);

А в реализации делать каст на нужный класс, ну для начала хотя бы просто посмотреть, прилетел ли в дебаг хоть какой-то адекватный указатель.

void GroupManager::createNewGroup(QObject *grp)
{
    qDebug() << "createNewGroup: " << grp; 
}

Попробовал переделать на QObject и сработало, проверил в выписе что прилетел именно qmlfakegroup но само собою дальеш qml где методы дергаются для данного класса полетели ошибки undefined.
Но по факту это сработало.

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

Спасибо за идею. Сейчас попробою.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Donate

Hello, Dear Users of EVILEG!!!

If the site helped you, then support the development of the site financially, please.

You can do it by following ways:

Thank you, Evgenii Legotckoi

T
Dec. 11, 2019, 4:56 p.m.
Toma

C++ - Тест 003. Условия и циклы

  • Result:50points,
  • Rating points-4
AT
Dec. 10, 2019, 8:06 a.m.
Anastasija Troschenkova

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

  • Result:60points,
  • Rating points-1
AT
Dec. 10, 2019, 8:02 a.m.
Anastasija Troschenkova

Qt - Test 001. Signals and slots

  • Result:73points,
  • Rating points1
Last comments
Dec. 9, 2019, 3:41 a.m.
Evgenij Legotskoj

Эта ошибка invalid use of incomplete type ‘class Ui::AnotherWindow’ обычно говорит о том, что не найдено определение класса или структуры. Типичная проблема - не подключён заголовочны…
NB
Dec. 9, 2019, 3:36 a.m.
Nikolaj Batmanov

Ну, не настолько со мной всё полхо...))) Вроде бы. Я ж кнопки отрисовываю.
Dec. 9, 2019, 3:14 a.m.
Evgenij Legotskoj

Добрый день. У вас ui файлов по ходу нет. UI файлы используются для вёрстки в графическом дизайнере.
NB
Dec. 9, 2019, 3:05 a.m.
Nikolaj Batmanov

Здравствуйте! Полностью скопировал ваш пример к себе, чтобы разобраться. А он не хочет запускаться, дает ошибку: invalid use of incomplete type ‘class Ui::AnotherWindow’ ui(new Ui…
Dec. 8, 2019, 7:23 a.m.
Evgenij Legotskoj

У меня здесь есть одна старая статья с примером векторного редактора. Там есть ответы на ваши вопросы. Поизучайте Qt/C++ - Урок 072. Пример векторного редактора на Qt QGraphicsItem, QG…
Now discuss on the forum
MU
Dec. 11, 2019, 8:27 a.m.
Maciej Urmański

Thank you! Now works, and this is solution. num_embed = Embed.objects.filter(added_by=recipe.added_by).count()
Dec. 11, 2019, 8:12 a.m.
Mihailll

Так работает. Взял этот пример https://api-2d3d-cad.com/face_recognition_with_opencv/ void MainWindow::on_pushButton_4_clicked() //фото определение лица{ // Load Face cascade (.xml…
TD
Dec. 10, 2019, 4:14 a.m.
Timur Dosov

Спасибо, работает. А ещё вопрос: как загрузить страницу с динамической подгрузкой контента по скроллингу? Например - [https://ntvplus.ru/tv/]. Пока делаю через костыль - QApplication::s…
Dec. 9, 2019, 7:16 a.m.
qml_puthon_user

Я сделал простой вывод текста по испусканию сигнала... Чего не хватает программе?) Python: # системные библиотекиimport cv2import numpy as npimport sysimport threading# PyQt б…
SK
Dec. 8, 2019, 4:11 p.m.
Semen Kosandjak

інтерфейс qt, приклад того додаю на малюнку, я натискаю на кнопку і у мене з'являється 2 текст лайну в які я вводжу значення, тобто в 1 цифри,у другому випадку це літери, тобто c++, без графічно…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB