效果图
#include <QTreeWidget>
#include <QVBoxLayout>
#include <QStatusBar>
#include <QList>
class TreeView :public QTreeWidget
{
public:
TreeView(QWidget *pParent = nullptr) :QTreeWidget(pParent) {}
~TreeView() {};
};
class TreeFrame :public QFrame
{
Q_OBJECT
public:
TreeFrame(QWidget *pParent = nullptr);
~TreeFrame();
void initUI();
void initWidgetItem();
void connectSlots();
//改变选中状态时同步子节点
void syncChildNodeCheckState(QTreeWidgetItem *parentItem, Qt::CheckState state);
//改变选中状态时同步父节点
void syncParentNodeCheckState(QTreeWidgetItem *item);
protected slots:
//勾选节点的信号
void itemClicked(QTreeWidgetItem *pItem, int nCol);
private:
TreeView *m_pTreeView;
QTreeWidgetItem *m_pWidgetItem;
QStatusBar *m_pBar;
const static int m_STypeRole = Qt::UserRole;
//节点类型
enum NodeType
{
NT_RootNode = 0,
NT_ChildNode,
NT_ChildToChild
};
};
TreeFrame::TreeFrame(QWidget