Spec-Zone.ru › Qt 5.6

Класс 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 позволяет манипулировать свойствами виджета, отображаемыми в редакторе свойств 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/archives/qt-5.6/qdesignerpropertysheetextension.html

Spec-Zone.ru

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