⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 propertyeditor.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer 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://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** 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 "propertyeditor.h"#include "findicondialog_p.h"#include "qpropertyeditor_model_p.h"#include "qpropertyeditor_items_p.h"// sdk#include <QtDesigner/QtDesigner>#include <QtDesigner/QExtensionManager>// shared#include <iconloader_p.h>#include <qdesigner_promotedwidget_p.h>#include <qdesigner_utils_p.h>#include <metadatabase_p.h>#include <QtGui/QtGui>#ifndef Q_MOC_RUNusing namespace qdesigner_internal;#endifIProperty *PropertyEditor::createSpecialProperty(const QVariant &value, const QString &name){    Q_UNUSED(value);    Q_UNUSED(name);    return 0;}// ---------------------------------------------------------------------------------class IconProperty : public AbstractProperty<QIcon>{public:    IconProperty(QDesignerFormEditorInterface *core, const QIcon &value, const QString &name);    void setValue(const QVariant &value);    QString toString() const;    QVariant decoration() const;    QWidget *createEditor(QWidget *parent, const QObject *target, const char *receiver) const;    void updateEditorContents(QWidget *editor);    void updateValue(QWidget *editor);private:    QDesignerFormEditorInterface *m_core;};class PixmapProperty : public AbstractProperty<QPixmap>{public:    PixmapProperty(QDesignerFormEditorInterface *core, const QPixmap &pixmap, const QString &name);    void setValue(const QVariant &value);    QString toString() const;    QVariant decoration() const;    QWidget *createEditor(QWidget *parent, const QObject *target, const char *receiver) const;    void updateEditorContents(QWidget *editor);    void updateValue(QWidget *editor);private:    QDesignerFormEditorInterface *m_core;};// This handles editing of pixmap and icon propertiesclass GraphicsPropertyEditor : public QWidget{    Q_OBJECTpublic:    GraphicsPropertyEditor(QDesignerFormEditorInterface *core, const QIcon &pm, QWidget *parent);    GraphicsPropertyEditor(QDesignerFormEditorInterface *core, const QPixmap &pixmap, QWidget *parent);    ~GraphicsPropertyEditor();    void setIcon(const QIcon &pm);    void setPixmap(const QPixmap &pm);    QIcon icon() const { return m_mode == Icon ? m_icon : QIcon(); }    QPixmap pixmap() const { return m_mode == Pixmap ? m_pixmap : QPixmap(); }signals:    void iconChanged(const QIcon &pm);    void pixmapChanged(const QPixmap &pm);private slots:    void showDialog();    void comboActivated(int idx);private:    void init();    void populateCombo();    int indexOfIcon(const QIcon &icon);    int indexOfPixmap(const QPixmap &pixmap);    enum Mode { Icon, Pixmap };    Mode m_mode;    QDesignerFormEditorInterface *m_core;    QComboBox *m_combo;    QToolButton *m_button;    QIcon m_icon;    QPixmap m_pixmap;};GraphicsPropertyEditor::~GraphicsPropertyEditor(){}void GraphicsPropertyEditor::init(){    QHBoxLayout *layout = new QHBoxLayout(this);    layout->setMargin(0);    layout->setSpacing(0);    m_combo = new QComboBox(this);    m_combo->setFrame(0);    m_combo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));    m_combo->setEditable(false);    layout->addWidget(m_combo);    m_button = new QToolButton(this);    m_button->setIcon(createIconSet(QLatin1String("fileopen.png")));    m_button->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding);    m_button->setFixedWidth(20);    layout->addWidget(m_button);    connect(m_button, SIGNAL(clicked()), this, SLOT(showDialog()));    connect(m_combo, SIGNAL(activated(int)), this, SLOT(comboActivated(int)));    populateCombo();}void GraphicsPropertyEditor::comboActivated(int idx){    if (m_mode == Icon) {        setIcon(qvariant_cast<QIcon>(m_combo->itemData(idx)));    } else {        setPixmap(qvariant_cast<QPixmap>(m_combo->itemData(idx)));    }}int GraphicsPropertyEditor::indexOfIcon(const QIcon &icon){    if (m_mode == Pixmap)        return -1;    if (icon.isNull())        return 0;    for (int i = 1; i < m_combo->count(); ++i) {        if (qvariant_cast<QIcon>(m_combo->itemData(i)).serialNumber() == icon.serialNumber())            return i;    }    populateCombo();    for (int i = 1; i < m_combo->count(); ++i) {        if (qvariant_cast<QIcon>(m_combo->itemData(i)).serialNumber() == icon.serialNumber())            return i;    }    return -1;}int GraphicsPropertyEditor::indexOfPixmap(const QPixmap &pixmap){    if (m_mode == Icon)        return -1;    if (pixmap.isNull())        return 0;    for (int i = 1; i < m_combo->count(); ++i) {        if (qvariant_cast<QPixmap>(m_combo->itemData(i)).serialNumber() == pixmap.serialNumber())            return i;    }    populateCombo();    for (int i = 1; i < m_combo->count(); ++i) {        if (qvariant_cast<QPixmap>(m_combo->itemData(i)).serialNumber() == pixmap.serialNumber())            return i;    }    return -1;}void GraphicsPropertyEditor::populateCombo(){    QDesignerFormWindowInterface *form = m_core->formWindowManager()->activeFormWindow();    if (form == 0)        return;    QStringList qrc_list = form->resourceFiles();    m_combo->clear();    QDesignerIconCacheInterface *cache = m_core->iconCache();    if (m_mode == Icon) {        m_combo->addItem(tr("<no icon>"));        QList<QIcon> icon_list = cache->iconList();        foreach (QIcon icon, icon_list) {            QString qrc_path = cache->iconToQrcPath(icon);            if (!qrc_path.isEmpty() && !qrc_list.contains(qrc_path))                continue;            m_combo->addItem(icon, QFileInfo(cache->iconToFilePath(icon)).fileName(),                                QVariant(icon));        }    } else {        m_combo->addItem(tr("<no pixmap>"));        QList<QPixmap> pixmap_list = cache->pixmapList();        foreach (QPixmap pixmap, pixmap_list) {            QString qrc_path = cache->iconToQrcPath(pixmap);            if (!qrc_path.isEmpty() && !qrc_list.contains(qrc_path))                continue;            m_combo->addItem(QIcon(pixmap),                                QFileInfo(cache->pixmapToFilePath(pixmap)).fileName(),                                QVariant(pixmap));        }    }    bool blocked = m_combo->blockSignals(true);    m_combo->setCurrentIndex(0);    m_combo->blockSignals(blocked);}GraphicsPropertyEditor::GraphicsPropertyEditor(QDesignerFormEditorInterface *core, const QIcon &pm,                                                QWidget *parent)    : QWidget(parent){    m_mode = Icon;    m_core = core;    init();    setIcon(pm);}GraphicsPropertyEditor::GraphicsPropertyEditor(QDesignerFormEditorInterface *core, const QPixmap &pm,                                                QWidget *parent)    : QWidget(parent){    m_mode = Pixmap;    m_core = core;    init();    setPixmap(pm);}void GraphicsPropertyEditor::showDialog(){    QDesignerFormWindowInterface *form = m_core->formWindowManager()->activeFormWindow();    if (form == 0)        return;    QString file_path;    QString qrc_path;    if (m_mode == Icon && !m_icon.isNull()) {        file_path = m_core->iconCache()->iconToFilePath(m_icon);        qrc_path = m_core->iconCache()->iconToQrcPath(m_icon);    } else if (!m_pixmap.isNull()) {        file_path = m_core->iconCache()->pixmapToFilePath(m_pixmap);        qrc_path = m_core->iconCache()->pixmapToQrcPath(m_pixmap);    }    FindIconDialog dialog(form, 0);    dialog.setPaths(qrc_path, file_path);    if (dialog.exec()) {        file_path = dialog.filePath();        qrc_path = dialog.qrcPath();        if (!file_path.isEmpty()) {            populateCombo();            if (m_mode == Icon) {                QIcon icon = m_core->iconCache()->nameToIcon(file_path, qrc_path);                populateCombo();                setIcon(icon);            } else {                QPixmap pixmap = m_core->iconCache()->nameToPixmap(file_path, qrc_path);                populateCombo();                setPixmap(pixmap);            }        }    }}void GraphicsPropertyEditor::setIcon(const QIcon &pm){    if (m_mode == Pixmap)        return;    if (pm.isNull() && m_icon.isNull())        return;    if (pm.serialNumber() == m_icon.serialNumber())        return;    m_icon = pm;    bool blocked = m_combo->blockSignals(true);    m_combo->setCurrentIndex(indexOfIcon(m_icon));    m_combo->blockSignals(blocked);    emit iconChanged(m_icon);}void GraphicsPropertyEditor::setPixmap(const QPixmap &pm){    if (m_mode == Icon)        return;    if (pm.isNull() && m_pixmap.isNull())        return;    if (pm.serialNumber() == m_pixmap.serialNumber())        return;    m_pixmap = pm;    bool blocked = m_combo->blockSignals(true);    m_combo->setCurrentIndex(indexOfPixmap(m_pixmap));    m_combo->blockSignals(blocked);    emit pixmapChanged(m_pixmap);}IconProperty::IconProperty(QDesignerFormEditorInterface *core, const QIcon &value, const QString &name)    : AbstractProperty<QIcon>(value, name){    m_core = core;}void IconProperty::setValue(const QVariant &value){    m_value = qvariant_cast<QIcon>(value);}QString IconProperty::toString() const{    QString path = m_core->iconCache()->iconToFilePath(m_value);    return QFileInfo(path).fileName();}QVariant IconProperty::decoration() const{    static QIcon empty_icon;    if (empty_icon.isNull())        empty_icon = QIcon(QLatin1String(":/trolltech/formeditor/images/emptyicon.png"));    if (m_value.isNull())        return qVariantFromValue(empty_icon);    return qVariantFromValue(m_value);}QWidget *IconProperty::createEditor(QWidget *parent, const QObject *target,                                        const char *receiver) const{    GraphicsPropertyEditor *editor = new GraphicsPropertyEditor(m_core, m_value, parent);    QObject::connect(editor, SIGNAL(iconChanged(QIcon)), target, receiver);    return editor;}void IconProperty::updateEditorContents(QWidget *editor){    if (GraphicsPropertyEditor *ed = qobject_cast<GraphicsPropertyEditor*>(editor)) {        ed->setIcon(m_value);    }}void IconProperty::updateValue(QWidget *editor){    if (GraphicsPropertyEditor *ed = qobject_cast<GraphicsPropertyEditor*>(editor)) {        QIcon newValue = ed->icon();        if (newValue.serialNumber() != m_value.serialNumber()) {            m_value = newValue;            setChanged(true);        }    }}PixmapProperty::PixmapProperty(QDesignerFormEditorInterface *core, const QPixmap &pixmap, const QString &name)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -