我有一個 QAbstractListModel,它通過
engine.rootContext()->setContextProperty
它顯示在 GridView 中。它包含像 A、Q 等卡片。我想以不同的方式(如顏色、型別等)對卡片進行排序。排序函式可以通過 qml 呼叫:
GridView
{
id:table_player
model: Playerfield
delegate: Card
{
card_id: model.card_id
Component.onCompleted:
{
Playerfield.sortDeck()
}
}
}
C 代碼:
public slots:
Q_INVOKABLE void sortDeck();
它有效,但僅在更改卡/播放新卡時更新 Playfield。我需要一種方法來向 QML 發送除“emit dataChanged()”之外的信號以進行更新。或者直接從 QML 使用更改的模型資料更新 Gridview 的方法(table_player.update() 不起作用)。
void Deckmodel::sortDeck()
{
for(uint a = 0; a < cards.size(); a )
{
for(uint b = a 1; b < cards.size(); b )
{
if(cards[a].type > cards[b].type)
{
Card temp = cards[a];
cards[a] = cards[b];
cards[b] = temp;
}
}
}
//insert signal here
}
uj5u.com熱心網友回復:
和你的代碼Deckmodel一樣嗎?Playerfield更改模型時,您需要呼叫 begin/endResetModel()。這將自動發出適當的信號,因此您的 QML 應該更新正確。
void Deckmodel::sortDeck()
{
beginResetModel();
for(uint a = 0; a < cards.size(); a )
{
for(uint b = a 1; b < cards.size(); b )
{
if(cards[a].type > cards[b].type)
{
Card temp = cards[a];
cards[a] = cards[b];
cards[b] = temp;
}
}
}
endResetModel();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412633.html
標籤:
上一篇:如何在定義之間添加空行?
