Qt:Документация 4.3.2/tools-plugandpaint-plugindialog-cpp

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
40px Внимание: Актуальная версия перевода документации находится здесь

__NOTOC__

Image:qt-logo.png

Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

Image:trolltech-logo.png

[править] plugindialog.cpp Example File
tools/plugandpaint/plugindialog.cpp

 /****************************************************************************
 **
 ** Copyright (C) 2005-2007 Trolltech ASA. All rights reserved.
 **
 ** This file is part of the example classes of the Qt Toolkit.
 **
 ** This file may be used under the terms of the GNU General Public
 ** License version 2.0 as published by the Free Software Foundation
 ** and appearing in the file LICENSE.GPL included in the packaging of
 ** this file.  Please review the following information to ensure GNU
 ** General Public Licensing requirements will be met:
 ** http://trolltech.com/products/qt/licenses/licensing/opensource/
 **
 ** If you are unsure which license is appropriate for your use, please
 ** review the following information:
 ** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
 ** or contact the sales department at sales@trolltech.com.
 **
 ** In addition, as a special exception, Trolltech gives you certain
 ** additional rights. These rights are described in the Trolltech GPL
 ** Exception version 1.0, which can be found at
 ** http://www.trolltech.com/products/qt/gplexception/ and in the file
 ** GPL_EXCEPTION.txt in this package.
 **
 ** In addition, as a special exception, Trolltech, as the sole copyright
 ** holder for Qt Designer, grants users of the Qt/Eclipse Integration
 ** plug-in the right for the Qt/Eclipse Integration to link to
 ** functionality provided by Qt Designer and its related libraries.
 **
 ** Trolltech reserves all rights not expressly granted herein.
 **
 ** Trolltech ASA (c) 2007
 **
 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 **
 ****************************************************************************/
 
 #include "interfaces.h"
 #include "plugindialog.h"
 
 #include <QPluginLoader>
 #include <QStringList>
 #include <QDir>
 
 #include <QLabel>
 #include <QGridLayout>
 #include <QPushButton>
 #include <QTreeWidget>
 #include <QTreeWidgetItem>
 #include <QHeaderView>
 
 PluginDialog::PluginDialog(const QString &amp;path, const QStringList &amp;fileNames,
                            QWidget *parent) :
     QDialog(parent),
     label(new QLabel),
     treeWidget(new QTreeWidget),
     okButton(new QPushButton(tr("OK")))
 {
     treeWidget->setAlternatingRowColors(false);
     treeWidget->setSelectionMode(QAbstractItemView::NoSelection);
     treeWidget->setColumnCount(1);
     treeWidget->header()->hide();
 
     okButton->setDefault(true);
 
     connect(okButton, SIGNAL(clicked()), this, SLOT(close()));
 
     QGridLayout *mainLayout = new QGridLayout;
     mainLayout->setColumnStretch(0, 1);
     mainLayout->setColumnStretch(2, 1);
     mainLayout->addWidget(label, 0, 0, 1, 3);
     mainLayout->addWidget(treeWidget, 1, 0, 1, 3);
     mainLayout->addWidget(okButton, 2, 1);
     setLayout(mainLayout);
 
     interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon),
                             QIcon::Normal, QIcon::On);
     interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon),
                             QIcon::Normal, QIcon::Off);
     featureIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon));
 
     setWindowTitle(tr("Plugin Information"));
     findPlugins(path, fileNames);
 }
 
 void PluginDialog::findPlugins(const QString &amp;path,
                                const QStringList &amp;fileNames)
 {
     label->setText(tr("Plug &amp; Paint found the following plugins\n"
                       "(looked in %1):")
                    .arg(QDir::toNativeSeparators(path)));
 
     const QDir dir(path);
 
     foreach (QObject *plugin, QPluginLoader::staticInstances())
         populateTreeWidget(plugin, tr("%1 (Static Plugin)")
                                    .arg(plugin->metaObject()->className()));
 
     foreach (QString fileName, fileNames) {
         QPluginLoader loader(dir.absoluteFilePath(fileName));
         QObject *plugin = loader.instance();
         if (plugin)
             populateTreeWidget(plugin, fileName);
     }
 }
 
 void PluginDialog::populateTreeWidget(QObject *plugin, const QString &amp;text)
 {
     QTreeWidgetItem *pluginItem = new QTreeWidgetItem(treeWidget);
     pluginItem->setText(0, text);
     treeWidget->setItemExpanded(pluginItem, true);
 
     QFont boldFont = pluginItem->font(0);
     boldFont.setBold(true);
     pluginItem->setFont(0, boldFont);
 
     if (plugin) {
         BrushInterface *iBrush = qobject_cast<BrushInterface *>(plugin);
         if (iBrush)
             addItems(pluginItem, "BrushInterface", iBrush->brushes());
 
         ShapeInterface *iShape = qobject_cast<ShapeInterface *>(plugin);
         if (iShape)
             addItems(pluginItem, "ShapeInterface", iShape->shapes());
 
         FilterInterface *iFilter =
                 qobject_cast<FilterInterface *>(plugin);
         if (iFilter)
             addItems(pluginItem, "FilterInterface", iFilter->filters());
     }
 }
 
 void PluginDialog::addItems(QTreeWidgetItem *pluginItem,
                             const char *interfaceName,
                             const QStringList &amp;features)
 {
     QTreeWidgetItem *interfaceItem = new QTreeWidgetItem(pluginItem);
     interfaceItem->setText(0, interfaceName);
     interfaceItem->setIcon(0, interfaceIcon);
 
     foreach (QString feature, features) {
         if (feature.endsWith("..."))
             feature.chop(3);
         QTreeWidgetItem *featureItem = new QTreeWidgetItem(interfaceItem);
         featureItem->setText(0, feature);
         featureItem->setIcon(0, featureIcon);
     }
 }

Copyright © 2007 Trolltech Trademarks
Qt 4.3.2