Spec-Zone.ru › Qt 6.0

Класс QDesignerPropertySheetExtension

Класс QDesignerPropertySheetExtension позволяет управлять свойствами виджета, которые отображаются в редакторе свойств Qt Designer. Подробнее...

Заголовок: #include <QDesignerPropertySheetExtension>
CMake: find_package(Qt6 COMPONENTS Designer REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Designer)
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 = 0
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 предоставляет набор функций, которые обычно используются для запроса свойств виджета и управления отображением свойств в редакторе свойств. Например:

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().

[pure virtual, since 5.0] 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-6.0/qdesignerpropertysheetextension.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API