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