QQmlOpenMetaObject нарушает полиморфизмC++

Программы на C++. Форум разработчиков
Anonymous
QQmlOpenMetaObject нарушает полиморфизм

Сообщение Anonymous »

Мой вопрос: можно ли использовать QQmlOpenMetaObject в классе и иметь перегрузки методов класса? Вероятно, я как-то неправильно использовал QQmlOpenMetaObject или что-то в этом роде, но в любом случае об этом не так много информации из-за частного API, но я был бы очень признателен, если бы кто-нибудь помог мне разобраться, в чем здесь проблема.
Также я создал git репо, если кто-то захочет построить пример и поиграть с ним.
Я пытаюсь использовать QQmlOpenMetaObject для своих целей. Объявление QQmlOpenMetaObject внутри моего класса приводит к нарушению поведения перегрузки функции.
Давайте посмотрим на нормальное поведение объекта:
// main.cpp
#include
#include
#include
#include "myclass.h"
#include "myclasswithregularmetaobject.h"
#include "myclasswithcustommetaobject.h"

int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;

if (true) {
engine.rootContext()->setContextProperty("myObject", QVariant::fromValue(new MyClass));
}
if (false) {
engine.rootContext()->setContextProperty("myObject", QVariant::fromValue(new MyClassWithRegularMetaObject));
}
if (false) {
engine.rootContext()->setContextProperty("myObject", QVariant::fromValue(new MyClassWithCustomMetaObject));
}
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

if (engine.rootObjects().isEmpty())
return -1;

return app.exec();
}

// main.qml
import QtQuick 2.14
import QtQuick.Controls 2.14

ApplicationWindow {
visible: true
width: 640
height: 480

Component.onCompleted: {
// Call the no-argument function
myObject.fire()

// Call the function with a QJSValue argument
var payload = { key: "value" }
myObject.fire(payload)
}
}

// myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H

#include
#include
#include

class MyClass : public QObject {
Q_OBJECT
public:
explicit MyClass(QObject *parent = nullptr)
: QObject(parent) {}

Q_INVOKABLE void fire() {
qDebug()

Подробнее здесь: https://stackoverflow.com/questions/787 ... lymorphism

Вернуться в «C++»