Класс QDesignerPropertySheetExtension
Класс QDesignerPropertySheetExtension позволяет манипулировать свойствами виджета, отображаемыми в редакторе свойств Qt Designer. Подробнее...
| Заголовок: | #include <QDesignerPropertySheetExtension> |
| qmake: | QT += designer |
Открытые функции
| виртуальный | ~QDesignerPropertySheetExtension() |
| виртуальный int | count() const = 0 |
| виртуальный bool | hasReset(int index) const = 0 |
| виртуальный int | indexOf(const QString &name) const = 0 |
| виртуальный bool | isAttribute(int index) const = 0 |
| виртуальный bool | isChanged(int index) const = 0 |
| виртуальный bool | isEnabled(int index) const |
| виртуальный bool | isVisible(int index) const = 0 |
| виртуальный QVariant | property(int index) const = 0 |
| виртуальный QString | propertyGroup(int index) const = 0 |
| виртуальный QString | propertyName(int index) const = 0 |
| виртуальный bool | reset(int index) = 0 |
| виртуальный void | setAttribute(int index, bool attribute) = 0 |
| виртуальный void | setChanged(int index, bool changed) = 0 |
| виртуальный void | setProperty(int index, const QVariant &value) = 0 |
| виртуальный void | setPropertyGroup(int index, const QString &group) = 0 |
| виртуальный void | setVisible(int index, bool visible) = 0 |
Подробное описание
QDesignerPropertySheetExtension предоставляет набор функций, обычно используемых для запроса свойств виджета и управления отображением свойств в редакторе свойств. Например:
QDesignerPropertySheetExtension *propertySheet = 0;
QExtensionManager manager = formEditor->extensionManager();
propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);
int index = propertySheet->indexOf(QLatin1String("margin"));
propertySheet->setProperty(index, 10);
propertySheet->setChanged(index, true);
delete propertySheet; Обратите внимание, что при изменении значения свойства с помощью функции QDesignerPropertySheetExtension::setProperty() стек отмены не обновляется. Чтобы убедиться, что значение свойства можно восстановить с помощью стека отмены, необходимо использовать функцию QDesignerFormWindowCursorInterface::setProperty() или её аналог setWidgetProperty().
При реализации плагина пользовательского виджета указатель на текущий объект QDesignerFormEditorInterface Qt Designer (formEditor в примере выше) предоставляется параметром функции QDesignerCustomWidgetInterface::initialize().
Панель свойств или любой другой плагин можно получить, запросив менеджер плагинов Qt Designer с помощью функции qt_extension(). При необходимости освободить плагин, необходимо только удалить указатель.
Все виджеты имеют стандартную панель свойств, которая заполняет редактор свойств Qt Designer свойствами виджета (т.е. теми, которые определены макросом Q_PROPERTY). Но QDesignerPropertySheetExtension также предоставляет интерфейс для создания пользовательских плагинов панели свойств.
Учитывайте следующие ограничения:
- Qt Designer использует QDesignerPropertySheetExtension для заполнения редактора свойств. Всякий раз, когда виджет выбирается в рабочем пространстве, Qt Designer запрашивает плагин свойств виджета. Если у выбранного виджета реализован плагин панели свойств, этот плагин переопределит стандартную панель свойств.
- Типы данных, используемые панелью свойств для некоторых свойств, являются неявными пользовательскими типами QVariant, содержащими дополнительную информацию вместо простых типов данных Qt. Например, это относится к перечислениям, флагам, значкам, растровым изображениям и строкам.
- Редактор свойств Qt Designer не имеет реализации для обработки типов Q_PROPERTY для пользовательских типов, объявленных с помощью Q_DECLARE_METATYPE().
Чтобы создать плагин панели свойств, ваш класс расширения должен унаследовать как от QObject, так и от QDesignerPropertySheetExtension. Затем, поскольку мы реализуем интерфейс, мы должны убедиться, что он известен системе метаобъектов с помощью макроса Q_INTERFACES:
class MyPropertySheetExtension : public QObject,
public QDesignerPropertySheetExtension
{
Q_OBJECT
Q_INTERFACES(QDesignerPropertySheetExtension)
public:
...
} Это позволяет Qt Designer использовать qobject_cast() для запроса поддерживаемых интерфейсов, используя только указатель QObject.
В Qt Designer плагины создаются только по мере необходимости. Поэтому при реализации плагина панели свойств необходимо также создать QExtensionFactory, т.е. класс, способный создавать экземпляр вашего плагина, и зарегистрировать его с помощью менеджера плагинов Qt Designer.
При необходимости плагина панели свойств менеджер плагинов Qt Designer перебирает все зарегистрированные фабрики, вызывая QExtensionFactory::createExtension() для каждой из них до тех пор, пока не найдётся первая, которая сможет создать плагин панели свойств для выбранного виджета. Эта фабрика затем создаст экземпляр плагина. Если такая фабрика не найдена, Qt Designer будет использовать стандартную панель свойств.
Существует четыре доступных типа плагинов в Qt Designer: QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension и QDesignerTaskMenuExtension. Поведение Qt Designer одинаково, независимо от того, связан ли запрашиваемый плагин с контейнером с несколькими страницами, листом членов, панелью свойств или меню задач.
Класс QExtensionFactory предоставляет стандартную фабрику плагинов и также может использоваться в качестве интерфейса для пользовательских фабрик плагинов. Вы можете создать новую QExtensionFactory и переопределить функцию QExtensionFactory::createExtension(). Например:
QObject *ANewExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
if (iid != Q_TYPEID(QDesignerPropertySheetExtension))
return 0;
if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
(object))
return new MyPropertySheetExtension(widget, parent);
return 0;
} Или вы можете использовать существующую фабрику, расширив функцию QExtensionFactory::createExtension(), чтобы сделать фабрику способной создавать плагин панели свойств. Например:
QObject *AGeneralExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
return new MyTaskMenuExtension(widget, parent);
} else if (widget && (iid == Q_TYPEID(QDesignerPropertySheetExtension))) {
return new MyPropertySheetExtension(widget, parent);
} else {
return 0;
}
} Для получения полного примера использования класса расширения см. пример плагина меню задач. Пример демонстрирует создание пользовательского плагина виджета для Qt Designer и использование класса QDesignerTaskMenuExtension для добавления пользовательских элементов в меню задач Qt Designer.
См. также QDesignerDynamicPropertySheetExtension, QExtensionFactory, QExtensionManager и Создание пользовательских расширений виджетов.
Документация по функциям-членам
[virtual] QDesignerPropertySheetExtension::~QDesignerPropertySheetExtension()
Уничтожает плагин панели свойств.
[pure virtual] int QDesignerPropertySheetExtension::count() const
Возвращает количество свойств выбранного виджета.
[pure virtual] bool QDesignerPropertySheetExtension::hasReset(int index) const
Возвращает true, если для свойства по заданному index имеется кнопка сброса в редакторе свойств Qt Designer, иначе false.
См. также indexOf() и reset().
[pure virtual] int QDesignerPropertySheetExtension::indexOf(const QString &name) const
Возвращает индекс заданного свойства name.
См. также propertyName().
[pure virtual] bool QDesignerPropertySheetExtension::isAttribute(int index) const
Возвращает true, если свойство по заданному index является атрибутом, который будет исключён из файла пользовательского интерфейса, в противном случае возвращает false.
См. также indexOf() и setAttribute().
[pure virtual] bool QDesignerPropertySheetExtension::isChanged(int index) const
Возвращает true, если значение свойства по заданному index отличается от значения по умолчанию свойства, в противном случае возвращает false.
См. также indexOf(), setChanged() и reset().
[virtual] bool QDesignerPropertySheetExtension::isEnabled(int index) const
Возвращает true, если свойство по заданному index включено в редакторе свойств Qt Designer, в противном случае возвращает false.
Эта функция была добавлена в Qt 5.0.
См. также indexOf().
[pure virtual] bool QDesignerPropertySheetExtension::isVisible(int index) const
Возвращает true, если свойство по заданному index отображается в редакторе свойств Qt Designer, в противном случае возвращает false.
См. также indexOf() и setVisible().
[pure virtual] QVariant QDesignerPropertySheetExtension::property(int index) const
Возвращает значение свойства по заданному index.
См. также indexOf(), setProperty() и propertyGroup().
[pure virtual] QString QDesignerPropertySheetExtension::propertyGroup(int index) const
Возвращает группу свойств для свойства по заданному index.
Редактор свойств Qt Designer поддерживает группы свойств, т.е. разделы взаимосвязанных свойств. Свойство может быть связано с группой с помощью функции setPropertyGroup(). По умолчанию группа любого свойства — это имя класса, который его определяет. Например, свойство QObject::objectName отображается в группе свойств QObject.
См. также indexOf() и setPropertyGroup().
[pure virtual] QString QDesignerPropertySheetExtension::propertyName(int index) const
Возвращает имя свойства по заданному index.
См. также indexOf().
[pure virtual] bool QDesignerPropertySheetExtension::reset(int index)
Сбрасывает значение свойства по заданному index до значения по умолчанию. Возвращает true, если значение по умолчанию найдено, в противном случае возвращает false.
См. также indexOf(), hasReset() и isChanged().
[pure virtual] void QDesignerPropertySheetExtension::setAttribute(int index, bool attribute)
Если attribute имеет значение true, свойство по заданному index становится атрибутом, который будет исключён из файла пользовательского интерфейса; в противном случае оно будет включено.
См. также indexOf() и isAttribute().
[pure virtual] void QDesignerPropertySheetExtension::setChanged(int index, bool changed)
Устанавливает, отличается ли свойство по заданному index от своего значения по умолчанию, в зависимости от параметра changed.
См. также indexOf() и isChanged().
[pure virtual] void QDesignerPropertySheetExtension::setProperty(int index, const QVariant &value)
Устанавливает значение свойства по заданному index.
Предупреждение: Если вы изменяете значение свойства с помощью этой функции, стек отмены не обновляется. Для того, чтобы значение свойства можно было восстановить с помощью стека отмены, необходимо использовать функцию QDesignerFormWindowCursorInterface::setProperty() или её аналог setWidgetProperty().
См. также indexOf(), property() и propertyGroup().
[pure virtual] void QDesignerPropertySheetExtension::setPropertyGroup(int index, const QString &group)
Устанавливает группу свойств для свойства по заданному index на group.
Связывание свойства с группой приводит к его отображению в соответствующем разделе редактора свойств. По умолчанию группа любого свойства — это имя класса, который его определяет. Например, свойство QObject::objectName отображается в группе свойств QObject.
См. также indexOf(), property() и propertyGroup().
[pure virtual] void QDesignerPropertySheetExtension::setVisible(int index, bool visible)
Если visible имеет значение true, свойство по заданному index отображается в редакторе свойств Qt Designer; в противном случае свойство скрывается.
См. также indexOf() и isVisible().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qdesignerpropertysheetextension.html