QDesignerContainerExtension Class

The QDesignerContainerExtension class allows you to add pages to a custom multi-page container in Qt Designer's workspace. 更多...

头: #include <QDesignerContainerExtension>

公共函数

virtual ~QDesignerContainerExtension ()
virtual void addWidget (QWidget * page ) = 0
virtual int count () const = 0
virtual int currentIndex () const = 0
virtual void insertWidget (int index , QWidget * page ) = 0
virtual void remove (int index ) = 0
virtual void setCurrentIndex (int index ) = 0
virtual QWidget * widget (int index ) const = 0

详细描述

The QDesignerContainerExtension class allows you to add pages to a custom multi-page container in Qt Designer's workspace.

QDesignerContainerExtension provide an interface for creating custom container extensions. A container extension consists of a collection of functions that Qt Designer needs to manage a multi-page container plugin, and a list of the container's pages.

警告: 这为 not an extension for container plugins in general, only custom multi-page containers.

To create a container extension, your extension class must inherit from both QObject and QDesignerContainerExtension 。例如:

class MyContainerExtension : public QObject,
       public QDesignerContainerExtension
{
    Q_OBJECT
    Q_INTERFACES(QDesignerContainerExtension)
public:
    MyContainerExtension(MyCustomWidget *widget,
                         QObject *parent = 0);
    int count() const;
    QWidget *widget(int index) const;
    int currentIndex() const;
    void setCurrentIndex(int index);
    void addWidget(QWidget *widget);
    void insertWidget(int index, QWidget *widget);
    void remove(int index);
private:
    MyCustomWidget *myWidget;
};
					

Since we are implementing an interface, we must ensure that it's made known to the meta object system using the Q_INTERFACES () macro. This enables Qt Designer 要使用 qobject_cast () function to query for supported interfaces using nothing but a QObject 指针。

You must reimplement several functions to enable Qt Designer to manage a custom multi-page container widget: Qt Designer 使用 count () to keep track of the number pages in your container, widget () to return the page at a given index in the list of the container's pages, and currentIndex () to return the list index of the selected page. Qt Designer 使用 addWidget () function to add a given page to the container, expecting it to be appended to the list of pages, while it expects the insertWidget () function to add a given page to the container by inserting it at a given index.

Qt Designer the extensions are not created until they are required. For that reason you must also create a QExtensionFactory , i.e a class that is able to make an instance of your extension, and register it using Qt Designer 's extension manager .

When a container extension is required, Qt Designer 's extension manager will run through all its registered factories calling QExtensionFactory::createExtension () for each until the first one that is able to create a container extension, is found. This factory will then create the extension for the plugin.

There are four available types of extensions in Qt Designer : QDesignerContainerExtension , QDesignerMemberSheetExtension , QDesignerPropertySheetExtension and QDesignerTaskMenuExtension . Qt Designer 's behavior is the same whether the requested extension is associated with a multi page container, a member sheet, a property sheet or a task menu.

The QExtensionFactory class provides a standard extension factory, and can also be used as an interface for custom extension factories. You can either create a new QExtensionFactory 并重实现 QExtensionFactory::createExtension () 函数。例如:

QObject *ANewExtensionFactory::createExtension(QObject *object,
        const QString &iid, QObject *parent) const
{
    if (iid != Q_TYPEID(QDesignerContainerExtension))
        return 0;
    if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
           (object))
        return new MyContainerExtension(widget, parent);
    return 0;
}
					

Or you can use an existing factory, expanding the QExtensionFactory::createExtension () function to make the factory able to create a container extension as well. For example:

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(QDesignerContainerExtension))) {
        return new MyContainerExtension(widget, parent);
    } else {
        return 0;
    }
}
					

For a complete example using the QDesignerContainerExtension class, see the Container Extension example . The example shows how to create a custom multi-page plugin for Qt Designer .

另请参阅 QExtensionFactory , QExtensionManager ,和 创建自定义 Widget 扩展 .

成员函数文档编制

[虚拟] QDesignerContainerExtension:: ~QDesignerContainerExtension ()

Destroys the extension.

[pure virtual] void QDesignerContainerExtension:: addWidget ( QWidget * page )

添加给定 page to the container by appending it to the extension's list of pages.

另请参阅 insertWidget (), remove (),和 widget ().

[pure virtual] int QDesignerContainerExtension:: count () const

Returns the number of pages in the container.

[pure virtual] int QDesignerContainerExtension:: currentIndex () const

Returns the index of the currently selected page in the container.

另请参阅 setCurrentIndex ().

[pure virtual] void QDesignerContainerExtension:: insertWidget ( int index , QWidget * page )

添加给定 page to the container by inserting it at the given index in the extension's list of pages.

另请参阅 addWidget (), remove (),和 widget ().

[pure virtual] void QDesignerContainerExtension:: remove ( int index )

Removes the page at the given index from the extension's list of pages.

另请参阅 addWidget () 和 insertWidget ().

[pure virtual] void QDesignerContainerExtension:: setCurrentIndex ( int index )

Sets the currently selected page in the container to be the page at the given index in the extension's list of pages.

另请参阅 currentIndex ().

[pure virtual] QWidget * QDesignerContainerExtension:: widget ( int index ) const

Returns the page at the given index in the extension's list of pages.

另请参阅 addWidget () 和 insertWidget ().