Это приложение реализуется в виде класса TextArtDialog. Мы будем показывать только тот программный код, который связан с применением подключаемых модулей. Давайте начнем с конструктора:
TextArtDialog::TextArtDialog(const QString &text, QWidget *parent) : QDialog(parent)
{
listWidget = new QListWidget; listWidget->setViewMode(QListWidget::IconMode); listWidget->setMovement(QListWidget::Static); listWidget->setIconSize(QSize(260, 80));
loadPluginsO; populateListWidget(text);
}
Конструктор создает виджет QListWidget, содержащий список доступных эффектов. Он вызывает закрытую функцию loadPluginsO для поиска и загрузки всех подключаемых модулей, реализующих интерфейс TextArtlnterface, и заполняет список виджетов с помощью вызова другой закрытой функции - populateListWid-get().
void TextArtDialog:: loadPluginsO {
QDir pluginDir(QApplication::applicationDirPath());
#if defined(Q_0S_WIN)
if (pluginDir.dirName().toLower() == "debug"
|| pluginDir.dirName().toLower() == "release") pluginDir.cdUpO; #elif defined(Q_0S_MAC)
if (pluginDir.dirName() == "MacOS") { pluginDir. cdLlpO; pluginDir.cdUpO; pluginDir.cdUpO;
}
#endif
if (!pluginDir.cd("plugins")) return;
foreach (QString fileName, pluginDir.entryList(QDir::Files)) { QPluginLoader loader(pluginDir.absoluteFilePath(fileName)); if (TextArtlnterface *interface =
qobject_cast<TextArtInterface *>(loader.instance())) interfaces.append(interface);
}
}
В функции loadPluginsO мы пытаемся загрузить все файлы, находящиеся в каталоге приложения plugins. (В Windows исполняемый модуль приложения обычно находится в подкаталоге debug или release, поэтому поднимаемся на один каталог выше. В Mac OS X учитываем структуру группового каталога (bundle directory).)
Если файл, который
<< назад вперед >>