简体   繁体   English

Qt 5.5 构建自定义 QTreeView

[英]Qt 5.5 Build a custom QTreeView

So, I've been trying to use QTreeView to display some classes I've built myself.所以,我一直在尝试使用 QTreeView 来显示我自己构建的一些类。 The idea is, I want to create a tournament manager, and obtain a view as follows:这个想法是,我想创建一个锦标赛经理,并获得如下视图:

-Tournament 1 - 锦标赛 1

--Team 1 --第一队

--Team2 --Team2

---Player 1 ---玩家1

---Player 2 ---玩家2

-Tournament 2 - 锦标赛 2

And so on and so on.等等等等。 I tried reading this tutorial but I didn't understand at all.我尝试阅读本教程,但我根本不明白。 I currently have 3 classes: Tournament, which contains a QString and a Team QList;我目前有 3 个课程:锦标赛,其中包含一个 QString 和一个团队 QList; Team, which contains a QString and a Player QList; Team,其中包含一个 QString 和一个 Player QList; and finally Player which contains a QString.最后是包含 QString 的 Player。 I also read that my class has to inheritate from QAbstractItemModel, but I don't know how to do it.我还读到我的类必须从 QAbstractItemModel 继承,但我不知道该怎么做。

Any form of help would be greatly appreciated.任何形式的帮助将不胜感激。 Thanks !谢谢 !

I think that the QStandardItemModel fits your needs and it's much easier to use than deriving your own model from the 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);

Edit 1: Adding custom data编辑 1:添加自定义数据

enum CustomRoles
{
    LocationRole = Qt::UserRole,
    AnotherDataRole = Qt::UserRole + 1
};

itemTournament1->setData("France", LocationRole);
itemTournament1->setData(12345, AnotherDataRole);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM