qt — вызывает метод QML из переполнения стека

Я хочу вызвать метод в MyMap из моего класса MyBackloggКак мне это сделать, если у меня нет параметров объекта в этом классе?

Я собираюсь получить строку, QByteArray или QDataStream в MyBackloggв зависимости от того, какой из них работает лучше всего, и я хочу передать их в мой графический интерфейс.

main.cpp:

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/qml/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;

QObject *item = engine.rootObjects().first();
MyTcpSocket s;
s.init();
QObject::connect(item, SIGNAL(sendSignal()), &s, SLOT(doSlot()));

return app.exec();
}

main.qml:

ApplicationWindow {
id: appWindow
visible: true
height: 600
width: 800
title: qsTr("MyApp")
signal sendSignal()

RowLayout{
visible: true
anchors.fill: parent

MyMap {
id: mapview
function myFunc() {
//function called from MyBacklogg
}
function myOtherFunc() {
sendSignal()
}
}
}
}

MyBacklogg.cpp:

#include "mybacklogg.h"
MyBacklogg::MyBacklogg(QObject *parent) :
QObject(parent)
{
}

void MyBacklogg::init()
{
//initialize
}

void MyBacklogg::doSlot()
{
//function call from MyMap
}

void MyBacklogg::callMethod()
{
??????????????????????????????
QMetaObject::invokeMethod(object, "myFunc",
Q_RETURN_ARG(QVariant, returnedValue),
Q_ARG(QVariant, msg));
??????????????????????????????
}

0

Решение

Вы пытались инициализировать MyBacklogg передавая object указатель на него и сохранение его как члена класса?

Хотя, если вы вызываете функции QML из C ++, в 99,9% случаев вы делаете это неправильно.

Правильным решением будет испустить сигнал из C ++ и установить для него обработчик на стороне QML.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]