Spec-Zone.ru › Qt 5.12

Класс QQuickImageProvider

Класс QQuickImageProvider предоставляет интерфейс для поддержки растровых изображений и потоковых запросов к изображениям в QML. Подробнее...

Заголовок: #include <QQuickImageProvider>
qmake: QT += quick
С тех пор: Qt 5.0
Наследуется от: QQmlImageProviderBase
Наследуется:

QQuickAsyncImageProvider

  • Список всех членов, включая наследуемые

Открытые функции

QQuickImageProvider(QQmlImageProviderBase::ImageType type, QQmlImageProviderBase::Flags flags = ...)
virtual ~QQuickImageProvider() override
virtual QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize)
virtual QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
virtual QQuickTextureFactory * requestTexture(const QString &id, QSize *size, const QSize &requestedSize)

Переопределённые открытые функции

virtual QQmlImageProviderBase::Flags flags() const override
virtual QQmlImageProviderBase::ImageType imageType() const override
  • 2 открытых функции унаследованы от QQmlImageProviderBase

Подробное описание

Класс QQuickImageProvider предоставляет интерфейс для поддержки растровых изображений и потоковых запросов к изображениям в QML.

QQuickImageProvider используется для предоставления расширенных функций загрузки изображений в приложениях QML. Он позволяет изображениям в QML:

  • Загружаться с помощью QPixmaps, а не фактических файлов изображений
  • Загружаться асинхронно в отдельном потоке

Чтобы указать, что изображение должно загружаться поставщиком изображений, используйте схему «image:» для исходного URL-адреса изображения, за которым следуют идентификаторы поставщика изображений и запрашиваемого изображения. Например:

Image { source: "image://myimageprovider/image.png" }

Это указывает, что изображение должно загружаться поставщиком изображений с именем «myimageprovider», и загружаемое изображение имеет имя «image.png». Движок QML вызывает соответствующего поставщика изображений в соответствии с поставщиками, которые были зарегистрированы через QQmlEngine::addImageProvider().

Обратите внимание, что идентификаторы нечувствительны к регистру, но остальная часть URL-адреса будет передаваться со сохранением регистра. Например, фрагмент кода ниже по-прежнему указывает, что изображение загружается поставщиком изображений с именем «myimageprovider», но запрашивается другое изображение, чем в предыдущем фрагменте («Image.png» вместо «image.png»).

Image { source: "image://MyImageProvider/Image.png" }

Если вам нужна остальная часть URL-адреса, нечувствительная к регистру, вам придется позаботиться об этом самостоятельно внутри вашего поставщика изображений.

Пример

Вот два изображения. Их source значения указывают, что они должны загружаться поставщиком изображений с именем «colors», и загружаемые изображения — «yellow» и «red» соответственно:

Column {
    Image { source: "image://colors/yellow" }
    Image { source: "image://colors/red" }
}

При загрузке этих изображений QML он ищет соответствующего поставщика изображений и вызывает его метод requestImage() или requestPixmap() (в зависимости от его imageType()), чтобы загрузить изображение. Метод вызывается с параметром id, установленным на «yellow» для первого изображения и «red» для второго.

Вот реализация поставщика изображений, которая может загрузить изображения, запрошенные вышеупомянутым QML. Эта реализация динамически генерирует QPixmap изображения, заполненные запрошенным цветом:

class ColorImageProvider : public QQuickImageProvider
{
public:
    ColorImageProvider()
               : QQuickImageProvider(QQuickImageProvider::Pixmap)
    {
    }

    QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override
    {
       int width = 100;
       int height = 50;

       if (size)
          *size = QSize(width, height);
       QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width,
                      requestedSize.height() > 0 ? requestedSize.height() : height);
       pixmap.fill(QColor(id).rgba());
       return pixmap;
    }
};

Чтобы сделать этот поставщик доступным для QML, он регистрируется в движке QML с идентификатором «colors»:

int main(int argc, char *argv[])
{

    QQuickView view;
    QQmlEngine *engine = view.engine();
    engine->addImageProvider(QLatin1String("colors"), new ColorImageProvider);
    view.setSource(QUrl::fromLocalFile(QStringLiteral("imageprovider-example.qml")));
    view.show();
    return app.exec();
}

Теперь изображения могут быть успешно загружены в QML:

См. Пример поставщика изображений для полной реализации. Обратите внимание, что в примере поставщик регистрируется через плагин, а не в функции приложения main() , как показано выше.

Асинхронная загрузка изображений

Поставщики изображений, поддерживающие QImage или загрузку текстур, автоматически включают поддержку асинхронной загрузки изображений. Чтобы включить асинхронную загрузку для источника изображения, установите свойство asynchronous в значение true для соответствующего Image, BorderImage или AnimatedImage объекта. При включении этого параметра запрос изображения к поставщику выполняется в потоке с низким приоритетом, что позволяет загружать изображение в фоновом режиме и уменьшает влияние на производительность пользовательского интерфейса.

Чтобы принудительно использовать асинхронную загрузку изображений, даже для источников изображений, у которых свойство asynchronous не установлено в значение true, вы можете передать флаг QQmlImageProviderBase::ForceAsynchronousImageLoading в конструктор поставщика изображений. Это гарантирует, что все запросы на изображения для поставщика обрабатываются в отдельном потоке.

Асинхронная загрузка для поставщиков изображений, предоставляющих QPixmap, поддерживается только на платформах, которые имеют функцию ThreadedPixmaps. На платформах, где пиксельные карты могут создаваться только в основном потоке (т. е. ThreadedPixmaps не поддерживается), если asynchronous установлен в значение true, это значение игнорируется, и изображение загружается синхронно.

Асинхронная загрузка изображений для поставщиков других типов, кроме ImageResponse, выполняется в одном потоке на основе движка. Это означает, что медленный поставщик изображений заблокирует загрузку любого другого запроса. Чтобы избежать этого, мы рекомендуем использовать QQuickAsyncImageProvider и реализовать многопоточность в стороне поставщика с помощью QThreadPool или аналогичного. См. Пример поставщика ответов на изображения для полной реализации.

Кэширование изображений

Изображения, возвращаемые QQuickImageProvider, автоматически кэшируются, подобно любому изображению, загружаемому движком QML. При загрузке изображения с префиксом «image://» из кэша методы requestImage() и requestPixmap() не будут вызываться для соответствующего поставщика изображений. Если изображение всегда должно загружаться у поставщика изображений и не должно кэшироваться, установите свойство cache в значение false для соответствующего Image, BorderImage или AnimatedImage объекта.

См. также QQmlEngine::addImageProvider().

Документация по функциям-членам

QQuickImageProvider::QQuickImageProvider(QQmlImageProviderBase::ImageType type, QQmlImageProviderBase::Flags flags = ...)

Создаёт поставщик изображений, который будет предоставлять изображения заданного типа type и вести себя в соответствии с заданными флагами flags.

[override virtual] QQuickImageProvider::~QQuickImageProvider()

Удаляет QQuickImageProvider

Примечание: Деструктор вашего производного класса должен быть потокобезопасным.

[override virtual] QQmlImageProviderBase::Flags QQuickImageProvider::flags() const

Переопределено из QQmlImageProviderBase::flags().

Возвращает флаги, установленные для этого поставщика.

[override virtual] QQmlImageProviderBase::ImageType QQuickImageProvider::imageType() const

Переопределено из QQmlImageProviderBase::imageType().

Возвращает тип изображения, поддерживаемый этим поставщиком.

[virtual] QImage QQuickImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)

Реализуйте этот метод для возвращения изображения с идентификатором id. Стандартная реализация возвращает пустое изображение.

id — запрашиваемый источник изображения, из которого удалены схема «image:» и идентификатор поставщика. Например, если изображение source было «image://myprovider/icons/home», то заданное id будет «icons/home».

requestedSize соответствует Image::sourceSize, запрошенному элементом Image. Если requestedSize является корректным размером, возвращаемое изображение должно иметь этот размер.

Во всех случаях размер должен быть установлен в исходный размер изображения. Это используется для установки ширины и высоты соответствующего изображения, если эти значения не были явно заданы.

Примечание: этот метод может вызываться из нескольких потоков, поэтому убедитесь, что его реализация потокобезопасна.

[virtual] QPixmap QQuickImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)

Реализуйте этот метод для возврата пиктограммы с id. По умолчанию возвращается пустая пиктограмма.

id — это запрашиваемый источник изображения, из которого удалены схема «image:» и идентификатор провайдера. Например, если изображение source было «image://myprovider/icons/home», заданное id будет «icons/home».

requestedSize соответствует Image::sourceSize, запрошенному элементом Image. Если requestedSize является корректным размером, возвращаемое изображение должно иметь этот размер.

Во всех случаях размер должен быть установлен в исходный размер изображения. Это используется для установки ширины и высоты соответствующего изображения, если эти значения не были явно заданы.

Примечание: этот метод может вызываться из нескольких потоков, поэтому убедитесь, что его реализация потокобезопасна.

[virtual] QQuickTextureFactory *QQuickImageProvider::requestTexture(const QString &id, QSize *size, const QSize &requestedSize)

Реализуйте этот метод для возврата текстуры с id. По умолчанию возвращается nullptr.

id — это запрашиваемый источник изображения, из которого удалены схема «image:» и идентификатор провайдера. Например, если изображение source было «image://myprovider/icons/home», заданное id будет «icons/home».

requestedSize соответствует Image::sourceSize, запрошенному элементом Image. Если requestedSize является корректным размером, возвращаемое изображение должно иметь этот размер.

Во всех случаях размер должен быть установлен в исходный размер изображения. Это используется для установки ширины и высоты соответствующего изображения, если эти значения не были явно заданы.

Примечание: этот метод может вызываться из нескольких потоков, поэтому убедитесь, что его реализация потокобезопасна.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/qquickimageprovider.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API