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

📄 qpropertyeditor_model.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** 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 "qpropertyeditor_model_p.h"#include <QtCore/qdebug.h>using namespace qdesigner_internal;QPropertyEditorModel::QPropertyEditorModel(QObject *parent)    : QAbstractItemModel(parent), m_initialInput(0){}QPropertyEditorModel::~QPropertyEditorModel(){}void QPropertyEditorModel::setInitialInput(IProperty *initialInput){    Q_ASSERT(initialInput);    m_initialInput = initialInput;    reset();}QModelIndex QPropertyEditorModel::index(int row, int column, const QModelIndex &parent) const{    if (!parent.isValid())        return createIndex(row, column, m_initialInput);    return createIndex(row, column, childAt(privateData(parent), row));}QModelIndex QPropertyEditorModel::parent(const QModelIndex &index) const{    if (!index.isValid() || privateData(index) == m_initialInput)        return QModelIndex();    Q_ASSERT(privateData(index));    return indexOf(parentOf(privateData(index)));}int QPropertyEditorModel::rowCount(const QModelIndex &parent) const{    if (!parent.isValid())        return 1;    if (IProperty *p = privateData(parent)) {        return (p->kind() == IProperty::Property_Group)            ? static_cast<IPropertyGroup*>(p)->propertyCount()            : 0;    }    return (m_initialInput->kind() == IProperty::Property_Group)        ? static_cast<IPropertyGroup*>(m_initialInput)->propertyCount()        : 0;}int QPropertyEditorModel::columnCount(const QModelIndex &parent) const{    Q_UNUSED(parent);    return 2;}bool QPropertyEditorModel::setData(const QModelIndex &index, const QVariant &value, int role){    if (IProperty *property = privateData(index)) {        if (role == Qt::EditRole) {            property->setValue(value);            refresh(property);            IProperty *nonfake = property;            while (nonfake != 0 && nonfake->isFake())                nonfake = nonfake->parent();            if (nonfake != 0 && nonfake->dirty()) {                nonfake->setDirty(false);                emit propertyChanged(nonfake);            }        }                return true;    }    return false;}QVariant QPropertyEditorModel::data(const QModelIndex &index, int role) const{    Q_UNUSED(role);    if (!privateData(index))        return QVariant();    IProperty *o = privateData(index);    switch (index.column()) {  // ### cleanup        case 0:            switch (role) {                case Qt::EditRole:                case Qt::DisplayRole:                    return o->propertyName().isEmpty()                        ? QLatin1String("<noname>")                        : o->propertyName();                default:                    break;            }            break;        case 1: {            switch (role) {                case Qt::EditRole:                    return o->value();                case Qt::DisplayRole:                    return o->toString();                case Qt::DecorationRole:                    return o->decoration();                default:                    break;            }            break;        }        default:            break;    }    return QVariant();}QString QPropertyEditorModel::columnText(int col) const{    switch (col) {        case 0: return QLatin1String("Property");        case 1: return QLatin1String("Value");        default: return QString();    }}void QPropertyEditorModel::refreshHelper(IProperty *property){    Q_ASSERT(property);    QModelIndex index0 = indexOf(property, 0);    QModelIndex index1 = indexOf(property, 1);    emit dataChanged(index0, index1);}void QPropertyEditorModel::refresh(IProperty *property){    Q_ASSERT(property);    // Refresh everyone up to the root    IProperty *prop = property;    while (prop != 0) {        refreshHelper(prop);        prop = prop->parent();    }    // Refresh all children    if (property->kind() == IProperty::Property_Group) {        IPropertyGroup *prop_group = static_cast<IPropertyGroup*>(property);        for (int i = 0; i < prop_group->propertyCount(); ++i) {            IProperty *child_prop = prop_group->propertyAt(i);            refreshHelper(child_prop);        }    }}void QPropertyEditorModel::refresh(){    refresh(m_initialInput);}bool QPropertyEditorModel::isEditable(const QModelIndex &index) const{    return index.column() == 1 && privateData(index)->hasEditor();}QModelIndex QPropertyEditorModel::buddy(const QModelIndex &index) const{    if (index.column() == 0)        return createIndex(index.row(), 1, index.internalPointer());    return index;}QVariant QPropertyEditorModel::headerData(int section, Qt::Orientation orientation, int role) const{    if (orientation == Qt::Horizontal) {        if (role != Qt::DisplayRole)            return QVariant();        return columnText(section);    }    return QAbstractItemModel::headerData(section, orientation, role);}Qt::ItemFlags QPropertyEditorModel::flags(const QModelIndex &index) const{    Q_ASSERT(index.isValid());    Qt::ItemFlags foo = QAbstractItemModel::flags(index);    if (isEditable(index))        foo |= Qt::ItemIsEditable;    return foo;}

⌨️ 快捷键说明

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