Использование расширений (plugins) в Qt

Использование расширений (plugins) в Qt

Использование расширений это неотъемлемая часть любого профессионального приложения. По сути, расширение — это совместно используемая динамическая библиотека, предназначенная для загрузки в процессе исполнения основного приложения, которая обязательно должна реализовывать хотя бы один специальный интерфейс. Расширения делятся на две группы:

расширения для Qt;
расширения для собственных приложений.

Расширение для Qt

Qt предоставляет различные типы расширений, предназначенные для дополнения возможностей библиотеки. Например, поддержка новых форматов растровых файлов, новых драйверов баз данных. Их более 20 и вот некоторые из них:

QSqlDriverPlugin — для драйверов баз данных;
QPictureFormatPlugin, QImageIOPlugin — для поддержки различных форматов растровых изображений;
QTextCodecPlugin — для реализации кодировок текста;
QStylePlugin — для стилей элементов управления.

Все эти классы наследуют класс QObject, который является базовым для всей системы расширений Qt. Свои расширения для Qt нужно строить на базе этих классов, реализовывая в них нужные методы. Возьмем для примера класс QStylePlugin. Реализация расширения с применением этого класса, CustomStyle, могла бы выглядеть так, как это показано в листингах.

class CustomStylePlugin : public QStylePlugin 
{ 
public: 
QStringList keys ( ) const; 
QStyle* create(const QString &key); 
};

В классе, унаследованном от QStylePlugin, необходимо реализовать виртуальные методы keys() и create().

QStringList CustomStylePlugin::keys() const
{
return QStringList() << "CustomStyle";
}

Метод keys() возвращает список строк, реализованных в классе расширений, в нашем примере оно одно — «CustomStyle»

QStyle* CustomStylePlugin::create(const QString &key)
{
    if (key == "CustomStyle") return new CustomStyle;
    return 0;
}

Метод create() создает запрашиваемый объект и возвращает указатель на него. В том случае, если запрашиваемый объект не найден, метод вернет нулевое значение. Экспортирование класса расширений производится в конце срр-файла при помощи макроса Q_EXPORT_PLUGIN2 следующим образом:

Q_EXPORT_PLUGIN2(CustomStylePlugin)

void main(int argc, char** argv)
{
    QApplication::setStyle(QStyleFactory::create("CustomStyle"));
}

Созданный класс расширений должен быть скомпилирован в динамическую библиотеку. Его загрузку можно произвести при помощи класса QStyleFactory.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *