Для некоторых приложений может потребоваться загрузка двух или более различных интерфейсов, и в этом случае программный код по получении этих интерфейсов мог бы выглядеть следующим образом:
01 QObject *plugin = loader.instance;
02 if (TextArtInterface *i = qobject_cast
03 textArtInterfaces.append(i);
04 if (BorderArtInterface *i = qobject_cast
05 borderArtInterfaces.append(i);
06 if (TextureInterface *i = qobject_cast
07 textureInterfaces.append(i);
Тип одного подключаемого модуля может успешно приводиться к нескольким указателям интерфейсов, поскольку подключаемые модули могут обеспечивать несколько интерфейсов, используя множественное наследование.
01 void TextArtDialog::populateListWidget(const QString &text)
02 {
03 QSize iconSize = listWidget->iconSize;
04 QPen pen(QColor("darkseagreen"));
05 QLinearGradient gradient(0, 0, iconSize.width / 2,
06 iconSize.height / 2);
07 gradient.setColorAt(0.0. QColor("darkolivegreen"));
08 gradient.setColorAt(0.8, QColor("darkgreen"));
09 gradient.setColorAt(1.0, QColor("lightgreen"));
10 QFont font("Helvetica", iconSize.height, QFont::Bold);
11 foreach (TextArtInterface *interface, interfaces) {
12 foreach (QString effect, interface->effects) {
13 QListWidgetItem *item = new QListWidgetItem(
14 effect, listWidget);
15 QPixmap pixmap = interface->applyEffect(effect,
16 text, font, iconSize, pen, gradient);
17 item->setData(Qt::DecorationRole, pixmap);
18 }
19 }
20 listWidget->setCurrentRow(0);
21 }
Функция
В данном разделе мы увидели, как можно загружать подключаемые модули, вызывая в конструкторе функцию
Написание подключаемых к приложению модулей
Подключаемый к приложению модуль является подклассом
Здесь мы рассмотрим программный код только одного из них — Basic Effects Plugin (модуль основных эффектов). Предполагаем, что исходный код подключаемого модуля находится в каталоге
01 class BasicEffectsPlugin
02 : public QObject, public TextArtInterface
03 {