2016-03-15 40 views
1

所以,我一直在试图使用QTreeView来显示我自己构建的一些类。 的想法是,我想创建一个赛事经理,并获得一个观点如下:Qt 5.5构建自定义QTreeView

-Tournament 1

--Team 1

--Team2

---球员1

---玩家2

-Tournament 2

依此类推。我试着读这个tutorial,但我完全不明白。我目前有3个类:锦标赛,其中包含一个QString和一个团队QList; Team,它包含一个QString和一个Player QList;最后是包含QString的播放器。我也读过我的类必须从QAbstractItemModel继承,但我不知道该怎么做。

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

回答

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); 
+0

它的工作对我有什么的那一刻,谢谢! 但我想要做的是添加更多的数据到我的课程。例如,锦标赛可能会得到一个QString的位置,团队可能会得到一个int,其数量的球员等。 我不知道如何使用QStandardItemModel来适应这个。 –

+1

使用* QStandardItem :: setData()*方法。看例子。 – Tomas