Я понял это. Вызов QQmlEngine::contextForObject(this);
в конструкторе не работает, я предполагаю, потому что объект еще не закончен, будучи построенным. Если я сделаю Q_INVOKABLE
функцию, чтобы зарегистрировать ее позже
void MyImageProvider::registerImageProvider()
{
QQmlEngine *engine = nullptr;
QQmlContext *context = QQmlEngine::contextForObject(this);
if (context)
engine = context->engine();
if (engine) {
engine->removeImageProvider("MyImageProvider");
engine->addImageProvider("MyImageProvider", this);
}
}
, а затем в моем QML:
ImageProvider {
id: myClass
Component.onCompleted: myClass.registerImageProvider();
}
Тогда это будет работать как шарм.