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);
}
}
};