Qt私有化

CMake下使用Qt私有类功能

target_link_libraries(${PROJ_NAME}
  PRIVATE
  Qt${QT_VERSION_MAJOR}::CorePrivate
  Qt${QT_VERSION_MAJOR}::GuiPrivate
  Qt${QT_VERSION_MAJOR}::WidgetsPrivate
)

获取一个公开类的D指针(如有)

  • d指针本身是 protected (如QGraphicsItem),非继承于QObject

以QGraphicsItem为例

#include <QtWidgets/private/qgraphicsitem_p.h>

class IGraphicsItem: public QGraphicsItem{
public:
  void setPrivateVisible(bool bVisible, bool update){
    QGraphicsItem::d_ptr->setVisibleHelper(bVisible,true,update,isPanel());
  }

};
  • d指针继承于QObjectPrivate,如常见的QWidget,QFrame...

以QTreeView为例

#include <QtWidgets/private/qtreeview_p.h>

class TreeView: public QTreeView{
  Q_OBJECT
public:
  TreeView(QWidget* parent = nullptr):QTreeView(parent){
    QTreeViewPrivate* priv = static_cast<QTreeViewPrivate*>(QObjectPrivate::get(this));
    if(priv){
      priv->animatedOperation.setDuration(1000);
    }
  }
};


本站由 困困鱼 使用 Stellar 创建。