Size: a a a

2021 January 09

ПК

Побитый Кирпич... in Qt
Если перед foo в интерфейсе вставить другой метод, то вместо foo вызовется уже qt_metacall - он же [2]
источник

ПК

Побитый Кирпич... in Qt
Мне прям в сеттер приходит указатель на объект с такой неверной таблицей, а если инстанцировать сразу, а не через id присваивать, то нормальная таблица в объекте
источник

AS

Anatoly Shirokov in Qt
Побитый Кирпич
Мне прям в сеттер приходит указатель на объект с такой неверной таблицей, а если инстанцировать сразу, а не через id присваивать, то нормальная таблица в объекте
в доке нашел:
QML_INTERFACE
This macro registers the enclosing C++ type in the QML system as an interface.

Types registered as an interface in QML should also declare themselves as an interface with the meta object system. For example:

struct FooInterface
{
   QML_INTERFACE
public:
   virtual ~FooInterface();
   virtual void doSomething() = 0;
};

Q_DECLARE_INTERFACE(FooInterface, "org.foo.FooInterface")
When registered with QML in this way, they can be used as property types:

Q_PROPERTY(FooInterface *foo READ foo WRITE setFoo)

When you assign a QObject sub-class to this property, the QML engine does the interface cast to FooInterface* automatically.
источник

AS

Anatoly Shirokov in Qt
все честно должно быть, но таблица виртуальной функции действительно лажовая
источник

ПК

Побитый Кирпич... in Qt
Anatoly Shirokov
в доке нашел:
QML_INTERFACE
This macro registers the enclosing C++ type in the QML system as an interface.

Types registered as an interface in QML should also declare themselves as an interface with the meta object system. For example:

struct FooInterface
{
   QML_INTERFACE
public:
   virtual ~FooInterface();
   virtual void doSomething() = 0;
};

Q_DECLARE_INTERFACE(FooInterface, "org.foo.FooInterface")
When registered with QML in this way, they can be used as property types:

Q_PROPERTY(FooInterface *foo READ foo WRITE setFoo)

When you assign a QObject sub-class to this property, the QML engine does the interface cast to FooInterface* automatically.
Да, читал это уже 10 раз, так просветления и не нашёл :))

И в твоём примере всё это есть
источник

AS

Anatoly Shirokov in Qt
у меня воспроизводится
источник

ПК

Побитый Кирпич... in Qt
Anatoly Shirokov
у меня воспроизводится
Что? ошибка?
источник

ПК

Побитый Кирпич... in Qt
Или всё правильно работает?
источник

AS

Anatoly Shirokov in Qt
вместо вызова виртуальной функции идет вызов qmetacall
источник

AS

Anatoly Shirokov in Qt
Побитый Кирпич
Или всё правильно работает?
нет, падает
источник

ПК

Побитый Кирпич... in Qt
Anatoly Shirokov
вместо вызова виртуальной функции идет вызов qmetacall
Ох, значит я правильно повторил за тобой хотя бы :))
источник

ПК

Побитый Кирпич... in Qt
Мб баг кута?
источник

AS

Anatoly Shirokov in Qt
ну, давай последовательно
источник

AS

Anatoly Shirokov in Qt
struct FooInterface
{
   QML_INTERFACE
public:
   virtual ~FooInterface();
   virtual void doSomething() = 0;
};
источник

AS

Anatoly Shirokov in Qt
при попытке регистрации qmlRegisterInterface<IDataProvider>("IDataProvider") получаем ворнинг
источник

AS

Anatoly Shirokov in Qt
что де, используйте qmlRegisterInterface(uri, version)
источник

AS

Anatoly Shirokov in Qt
при попытке ее использовать получаем ошибку линковки
источник

AS

Anatoly Shirokov in Qt
qmlRegisterInterface<IDataProvider>("IDataProvider", 1);
источник

AS

Anatoly Shirokov in Qt
D:\Qt\5.15.0\msvc2019_64\include\QtQml\qqml.h:537: error: C2039: 'staticMetaObject': is not a member of 'IDataProvider'
источник

AS

Anatoly Shirokov in Qt
поскольку это не QObject
источник