File indexing completed on 2026-07-19 08:26:22
0001
0002
0003
0004
0005 #ifndef QITEMEDITORFACTORY_H
0006 #define QITEMEDITORFACTORY_H
0007
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtCore/qmetaobject.h>
0010 #include <QtCore/qbytearray.h>
0011 #include <QtCore/qhash.h>
0012 #include <QtCore/qvariant.h>
0013
0014 QT_REQUIRE_CONFIG(itemviews);
0015
0016 QT_BEGIN_NAMESPACE
0017
0018 class QWidget;
0019
0020 class Q_WIDGETS_EXPORT QItemEditorCreatorBase
0021 {
0022 public:
0023 virtual ~QItemEditorCreatorBase();
0024
0025 virtual QWidget *createWidget(QWidget *parent) const = 0;
0026 virtual QByteArray valuePropertyName() const = 0;
0027 };
0028
0029 template <class T>
0030 class QItemEditorCreator : public QItemEditorCreatorBase
0031 {
0032 public:
0033 inline explicit QItemEditorCreator(const QByteArray &valuePropertyName);
0034 inline QWidget *createWidget(QWidget *parent) const override { return new T(parent); }
0035 inline QByteArray valuePropertyName() const override { return propertyName; }
0036
0037 private:
0038 QByteArray propertyName;
0039 };
0040
0041 template <class T>
0042 class QStandardItemEditorCreator: public QItemEditorCreatorBase
0043 {
0044 public:
0045 inline QStandardItemEditorCreator()
0046 : propertyName(T::staticMetaObject.userProperty().name())
0047 {}
0048 inline QWidget *createWidget(QWidget *parent) const override { return new T(parent); }
0049 inline QByteArray valuePropertyName() const override { return propertyName; }
0050
0051 private:
0052 QByteArray propertyName;
0053 };
0054
0055
0056 template <class T>
0057 Q_INLINE_TEMPLATE QItemEditorCreator<T>::QItemEditorCreator(const QByteArray &avaluePropertyName)
0058 : propertyName(avaluePropertyName) {}
0059
0060 class Q_WIDGETS_EXPORT QItemEditorFactory
0061 {
0062 public:
0063 inline QItemEditorFactory() {}
0064 virtual ~QItemEditorFactory();
0065
0066 virtual QWidget *createEditor(int userType, QWidget *parent) const;
0067 virtual QByteArray valuePropertyName(int userType) const;
0068
0069 void registerEditor(int userType, QItemEditorCreatorBase *creator);
0070
0071 static const QItemEditorFactory *defaultFactory();
0072 static void setDefaultFactory(QItemEditorFactory *factory);
0073
0074 private:
0075 QHash<int, QItemEditorCreatorBase *> creatorMap;
0076 };
0077
0078 QT_END_NAMESPACE
0079
0080 #endif