Qt 5.5构建自定义QTreeView

时间:2016-03-15 14:36:20

标签: c++ qt

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

-Tournament 1

- 第1队

- 的Team2

---玩家1

---玩家2

-Tournament 2

依此类推。我试过阅读tutorial,但我根本不明白。我目前有3个类:Tournament,其中包含一个QString和一个Team QList; Team,包含QString和Player QList;最后是包含QString的Player。我还读到我的班级必须从QAbstractItemModel继承,但我不知道该怎么做。

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

1 个答案:

答案 0 :(得分:1)

我认为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);