1. 程式人生 > 其它 >QT的QDesignerContainerExtension類的使用

QT的QDesignerContainerExtension類的使用

技術標籤:QT相關

詳細說明
QDesignerContainerExtension類允許您將頁面新增到Qt Designer工作空間中的自定義多頁容器中。

在這裡插入圖片描述
QDesignerContainerExtension提供了用於建立自定義容器擴充套件的介面。 容器擴充套件包含Qt Designer管理多頁容器外掛所需的功能集合和容器頁面列表。
警告:通常,這不是容器外掛的擴充套件,僅是自定義多頁容器。
要建立容器擴充套件,擴充套件類必須同時繼承QObject和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; };

QExtensionFactory類提供了一個標準擴充套件工廠,也可以用作自定義擴充套件工廠的介面。 您可以建立一個新的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;
  }

或者,您可以使用現有工廠,擴充套件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(QDesignerContainerExtension))) {
          return new MyContainerExtension(widget, parent);

      } else {
          return 0;
      }