2016-03-15 36 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