Spec-Zone.ru › Qt 5.13

Класс 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 предоставляет набор функций, которые обычно используются для запроса свойств виджета и управления внешним видом свойств в редакторе свойств. Например:

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)

Устанавливает значение свойства по заданному 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.13/qdesignerpropertysheetextension.html

Spec-Zone.ru

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