Класс QDesignerPropertySheetExtension
Класс QDesignerPropertySheetExtension позволяет управлять свойствами виджета, отображаемыми в редакторе свойств Qt Designer. Подробнее...
| Заголовок: | #include <QDesignerPropertySheetExtension> |
| qmake: | QT += designer |
Открытые функции
| virtual | ~QDesignerPropertySheetExtension() |
| virtual int | count() const = 0 |
| virtual bool | hasReset(int index) const = 0 |
| virtual int | indexOf(const QString &name) const = 0 |
| virtual bool | isAttribute(int index) const = 0 |
| virtual bool | isChanged(int index) const = 0 |
| virtual bool | isEnabled(int index) const |
| virtual bool | isVisible(int index) const = 0 |
| virtual QVariant | property(int index) const = 0 |
| virtual QString | propertyGroup(int index) const = 0 |
| virtual QString | propertyName(int index) const = 0 |
| virtual bool | reset(int index) = 0 |
| virtual void | setAttribute(int index, bool attribute) = 0 |
| virtual void | setChanged(int index, bool changed) = 0 |
| virtual void | setProperty(int index, const QVariant &value) = 0 |
| virtual void | setPropertyGroup(int index, const QString &group) = 0 |
| virtual void | setVisible(int index, bool visible) = 0 |
Подробное описание
Класс QDesignerPropertySheetExtension позволяет управлять свойствами виджета, отображаемыми в редакторе свойств Qt Designer.
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. Например, это относится к перечислениям, флагам, иконкам, растровым изображениям и строкам.
Для создания плагина листа свойств ваш класс расширения должен наследоваться как от 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)
Устанавливает 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.9/qdesignerpropertysheetextension.html