Qt 5.5 构建自定义 QTreeView

Qt 5.5 Build a custom QTreeView

本文关键字:QTreeView 自定义 构建 Qt      更新时间:2023-10-16

所以,我一直在尝试使用QTreeView来显示我自己构建的一些类。这个想法是,我想创建一个锦标赛管理器,并获得如下视图:

-锦标赛 1

-

-团队 1

-

-团队2

---玩家1

---玩家2

-锦标赛2

等等等等。我尝试阅读本教程,但我完全不明白。我目前有 3 个班级:锦标赛,其中包含一个 QString 和一个团队 QList;团队,包含一个 QString 和一个玩家 QList;最后是包含QString的播放器。我还读到我的类必须从QAbstractItemModel继承,但我不知道该怎么做。

任何形式的帮助将不胜感激。谢谢!

我认为该QStandardItemModel符合您的需求,并且比从QAbstractItemModel派生您自己的模型更容易使用。

QStandardItem* itemTournament1 = new QStandardItem("Tournament 1");
QStandardItem* itemTeam1 = new QStandardItem("Team 1");
QStandardItem* itemTeam2 = new QStandardItem("Team 2");
QStandardItem* itemPlayer1 = new QStandardItem("Player 1");
QStandardItemModel* model = new QStandardItemModel;
model->setColumnCount(0);
model->appendRow(itemTournament1);
itemTournament1->appendRow(itemTeam1);
itemTournament1->appendRow(itemTeam2);
itemTeam1->appendRow(itemPlayer1);
// etc.
QTreeView* view = new QTreeView;
view->setModel(model);

编辑 1:添加自定义数据

enum CustomRoles
{
    LocationRole = Qt::UserRole,
    AnotherDataRole = Qt::UserRole + 1
};
itemTournament1->setData("France", LocationRole);
itemTournament1->setData(12345, AnotherDataRole);