Size: a a a

2020 July 11

МВ

Макс Воробьев... in Qt
Побитый Кирпич
Как правильно сделать такую структуру?
class QmlGuiElement {
 Q_PROPERTY(IDataProvider dataProvider); // Хочу устанавливать dataProvider из QML
};

class IDataProvider : public QObject { // Наследую от QObject, чтобы юзать в Q_PROPERTY
 virtual void loadData(...) = 0;
}

class DataProvider : public QObject, public IDataProvider { // Наследую QObject чтоб инстанцировать в QML
 void loadData(...) override;
}
qmlRegisterType<DataProvider>(...);

И потом в qml коде писать:
QmlGuiElement {
 dataProvider: DataProvider {}
}


При таком коде пишет, что множественное наследование от QObject не поддерживается. Как правильно должен код выглядеть?
возможно есть смысл поискать про Q_INTERFACES
источник

ПК

Побитый Кирпич... in Qt
Макс Воробьев
возможно есть смысл поискать про Q_INTERFACES
Я искал, но так и не понял как оно тут решает, везде пишут что эта хрень для плагинов
источник

МВ

Макс Воробьев... in Qt
Побитый Кирпич
Я искал, но так и не понял как оно тут решает, везде пишут что эта хрень для плагинов
источник

ПК

Побитый Кирпич... in Qt
Да, там после определения этого парсера такая хрень:
#define QQmlParserStatus_iid "org.qt-project.Qt.QQmlParserStatus"
Q_DECLARE_INTERFACE(QQmlParserStatus, QQmlParserStatus_iid)
Я надеюсь мне это не нужно
источник

МВ

Макс Воробьев... in Qt
Побитый Кирпич
Да, там после определения этого парсера такая хрень:
#define QQmlParserStatus_iid "org.qt-project.Qt.QQmlParserStatus"
Q_DECLARE_INTERFACE(QQmlParserStatus, QQmlParserStatus_iid)
Я надеюсь мне это не нужно
а возможно то, что нужно
источник

МВ

Макс Воробьев... in Qt
в плане qml
источник

МВ

Макс Воробьев... in Qt
ибо позволяет не наследовать интерфейс от Q_OBJECT
источник

МВ

Макс Воробьев... in Qt
источник

МВ

Макс Воробьев... in Qt
нужно посмотреть, как это в Qt используется
источник

ПК

Побитый Кирпич... in Qt
Макс Воробьев
ибо позволяет не наследовать интерфейс от Q_OBJECT
Мне это не сильно мешает, по сути это будет не интерфейс а полноценный абстрактный класс. Тут скорее вопрос съест ли QML такой полиморфизм на наследовании
источник

ПК

Побитый Кирпич... in Qt
Или надо как раз этот макрос юзать?
источник

МВ

Макс Воробьев... in Qt
Побитый Кирпич
Мне это не сильно мешает, по сути это будет не интерфейс а полноценный абстрактный класс. Тут скорее вопрос съест ли QML такой полиморфизм на наследовании
съест, пока тебе не нужен будет объект, отнаследованный от 2-х интерфейсов
источник

ПК

Побитый Кирпич... in Qt
Макс Воробьев
съест, пока тебе не нужен будет объект, отнаследованный от 2-х интерфейсов
https://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterInterface

Вот такую штуку ещё нашёл
источник

МВ

Макс Воробьев... in Qt
👍
источник

👀

👀 in Qt
Какие преимущества у QML перед Qt Widgets
источник

ПК

Побитый Кирпич... in Qt
qmlRegisterInterface<T>(const char *typeName);

Помечен как:
QT_DEPRECATED_VERSION_X_5_15("Use qmlRegisterInterface(uri, versionMajor) instead")

Вопрос, какая семантика у этих параметров - uri и versionMajor и что я должен писать туда если хочу свой C++ класс IDataProvider зарегать?
Я так понимаю это в последнем Qt добавилось и доки по этой перегрузке вообще нет (по крайней мере я на https://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterInterface не нашёл)
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in Qt
Побитый Кирпич
qmlRegisterInterface<T>(const char *typeName);

Помечен как:
QT_DEPRECATED_VERSION_X_5_15("Use qmlRegisterInterface(uri, versionMajor) instead")

Вопрос, какая семантика у этих параметров - uri и versionMajor и что я должен писать туда если хочу свой C++ класс IDataProvider зарегать?
Я так понимаю это в последнем Qt добавилось и доки по этой перегрузке вообще нет (по крайней мере я на https://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterInterface не нашёл)
Ну можно задать версию и юри через который можно тип получить
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in Qt
Типо
import SomeClass 1.2
источник

/dev/urandon ¯\_(ツ)_... in Qt
👀
Какие преимущества у QML перед Qt Widgets
Скорость разработки
источник

МВ

Макс Воробьев... in Qt
👀
Какие преимущества у QML перед Qt Widgets
озадачил.
источник