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

📄 qitemeditorfactory.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 QtGui module 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 <qplatformdefs.h>#include "qitemeditorfactory.h"#ifndef QT_NO_ITEMVIEWS#include <qcombobox.h>#include <qdatetimeedit.h>#include <qlabel.h>#include <qlineedit.h>#include <qspinbox.h>#include <limits.h>#include <qcoreapplication.h>/*!    \class QItemEditorFactory    \brief The QItemEditorFactory class provides widgets for editing item data    in views and delegates.    \ingroup model-view    When editing the data shown by an item delegate, the QItemDelegate responsible    requests an editor widget from its item editor factory by calling the    createEditor() function. The default factory is provided by this class, but it    is possible to implement subclasses that provide specialized editing behavior,    such as row or column-specific editors, or editors for certain types of data.    \section1 Standard Editing Widgets    The standard factory implementation provides editors for a variety of data    types. These are created whenever a delegate needs to provide an editor for    data supplied by a model. The following table shows the relationship between    types and the standard editors provided.    \table    \header \o Type \o Editor Widget    \row    \o bool \o QComboBox    \row    \o double \o QDoubleSpinBox    \row    \o int \o{1,2} QSpinBox    \row    \o unsigned int    \row    \o QDate \o QDateEdit    \row    \o QDateTime \o QDateTimeEdit    \row    \o QPixmap \o QLabel    \row    \o QString \o QLineEdit    \row    \o QTime \o QTimeEdit    \endtable    Additional editors can be registered for use with both standard and custom    delegates with the registerEditor() function.    \sa QItemDelegate, {Model/View Programming}*//*!    \fn QItemEditorFactory::QItemEditorFactory()    Constructs a new item editor factory.*//*!Creates an editor widget with the given \a parent for the specified \a type of data,and returns it as a QWidget.\sa registerEditor()*/QWidget *QItemEditorFactory::createEditor(QVariant::Type type, QWidget *parent) const{    QItemEditorCreatorBase *creator = creatorMap.value(type, 0);    if (!creator)        return defaultFactory()->createEditor(type, parent);    return creator->createWidget(parent);}/*!Returns the property name used to identify the given \a type of data. */QByteArray QItemEditorFactory::valuePropertyName(QVariant::Type type) const{    QItemEditorCreatorBase *creator = creatorMap.value(type, 0);    if (!creator)        return defaultFactory()->valuePropertyName(type);    return creator->valuePropertyName();}/*!Destroys the item editor factory.*/QItemEditorFactory::~QItemEditorFactory(){}/*!Registers an item editor creator specified by \a creator for the given \a type of data.\sa createEditor()*/void QItemEditorFactory::registerEditor(QVariant::Type type, QItemEditorCreatorBase *creator){   delete creatorMap.value(type, 0);   creatorMap[type] = creator;}class QDefaultItemEditorFactory : public QItemEditorFactory{    Q_DECLARE_TR_FUNCTIONS(QDefaultItemEditorFactory)public:    inline QDefaultItemEditorFactory() {}    QWidget *createEditor(QVariant::Type type, QWidget *parent) const;    QByteArray valuePropertyName(QVariant::Type) const;};QWidget *QDefaultItemEditorFactory::createEditor(QVariant::Type type, QWidget *parent) const{    switch (type) {#ifndef QT_NO_COMBOBOX    case QVariant::Bool: {        QComboBox *cb = new QComboBox(parent);        cb->setFrame(false);        cb->addItem(tr("False"));        cb->addItem(tr("True"));        return cb; }#endif#ifndef QT_NO_SPINBOX    case QVariant::UInt: {        QSpinBox *sb = new QSpinBox(parent);        sb->setFrame(false);        sb->setMaximum(INT_MAX);        return sb; }    case QVariant::Int: {        QSpinBox *sb = new QSpinBox(parent);        sb->setFrame(false);        sb->setMinimum(INT_MIN);        sb->setMaximum(INT_MAX);        return sb; }#endif#ifndef QT_NO_DATETIMEEDIT    case QVariant::Date: {        QDateTimeEdit *ed = new QDateEdit(parent);        ed->setFrame(false);        return ed; }    case QVariant::Time: {        QDateTimeEdit *ed = new QTimeEdit(parent);        ed->setFrame(false);        return ed; }    case QVariant::DateTime: {        QDateTimeEdit *ed = new QDateTimeEdit(parent);        ed->setFrame(false);        return ed; }#endif    case QVariant::Pixmap:        return new QLabel(parent);#ifndef QT_NO_SPINBOX    case QVariant::Double: {        QDoubleSpinBox *sb = new QDoubleSpinBox(parent);        sb->setFrame(false);        return sb; }#endif#ifndef QT_NO_LINEEDIT    case QVariant::String:    default: {        // the default editor is a lineedit        QLineEdit *le = new QLineEdit(parent);        le->setFrame(false);        return le; }#else    default:        break;#endif    }    return 0;}QByteArray QDefaultItemEditorFactory::valuePropertyName(QVariant::Type type) const{    switch (type) {    case QVariant::Bool:        return "currentItem";    case QVariant::UInt:    case QVariant::Int:    case QVariant::Double:        return "value";    case QVariant::Date:        return "date";    case QVariant::Time:        return "time";    case QVariant::DateTime:        return "dateTime";    case QVariant::String:    default:        // the default editor is a lineedit        return "text";    }}static QItemEditorFactory *q_default_factory = 0;struct QDefaultFactoryCleaner{    inline QDefaultFactoryCleaner() {}    ~QDefaultFactoryCleaner() { delete q_default_factory; q_default_factory = 0; }};/*!Returns the default item editor factory.\sa setDefaultFactory()*/const QItemEditorFactory *QItemEditorFactory::defaultFactory(){    static const QDefaultItemEditorFactory factory;    if (q_default_factory)        return q_default_factory;    return &factory;}/*!    Sets the default item editor factory to the given \a factory.    \sa defaultFactory()*/void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory){    static const QDefaultFactoryCleaner cleaner;    delete q_default_factory;    q_default_factory = factory;}/*!    \class QItemEditorCreatorBase    \brief The QItemEditorCreatorBase class provides an abstract base class that    must be subclassed when implementing new item editor creators.    \ingroup model-view    Item editor creators are specialized widget factories that provide editor widgets    for specific types of item data. QItemEditorFactory finds the appropriate factory    for editors using a QVariant-based scheme to associate data types with editor    creators.    \sa QItemEditorFactory, {Model/View Programming}*//*!    \fn QItemEditorCreatorBase::~QItemEditorCreatorBase()    Destroys the editor creator object.*//*!    \fn QWidget *QItemEditorCreatorBase::createWidget(QWidget *parent) const    Returns an editor widget with the given \a parent.    When implementing this function in subclasses of this class, you must    construct and return new editor widgets with the parent widget specified.*//*!    \fn QByteArray QItemEditorCreatorBase::valuePropertyName() const    Returns the name of the property associated with the creator's editor    widgets.    When implementing this function in subclasses, the property name you    must return corresponds to the type of value that your editor widgets    are designed to edit.*/#endif // QT_NO_ITEMVIEWS

⌨️ 快捷键说明

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