2011-10-06 21 views
2

在Qt中,我有一個QListView,它使用了一個包含要顯示的數據的自定義Model類。根據這些數據,我希望將背景(最終是前景/文本)顏色設置爲與數據的狀態相匹配。在Qt中,如何從模型中重置ListView中項目的背景顏色?

到目前爲止,我已經通過在QAbstractListModel::data()方法返回用的QVariant內選定QColor一個QBrushQt::BackgroundRole,像這樣做到了這一點:

QVariant CustomListModel::data(const QModelIndex& index, int role) const 
{ 
    Item& item = findItem(index); 
    if (item) 
    { 
    // ... 
    if (role == Qt::BackgroundRole) 
    { 
     return QVariant(QBrush(item.color())); 
    } 
    // ... 
    } 
} 

,我遇到的問題是,我想當項目的狀態變爲'中性'時,能夠將顏色重新設置回部件的默認背景顏色,但是我一直無法找到正確的指令來執行此操作。什麼是規範的方式來實現這一點?

+0

現在考慮添加我嘗試過的東西時,我可能錯過了其他地方所需的連接,它阻止了所需的東西工作。我將在明天的工作中對其進行測試,並瞭解哪些解決方案可行。 – Daemin

+0

好吧,我的不好,這是我的一個問題,不能正確地在其他地方傳播狀態。我已經解決了這個問題,並且很容易地解決了顏色設置和不安定工作 – Daemin

回答

2

嘗試這樣的事情在你的數據的方法:

if (role == Qt::BackgroundRole) 
{ 
    bool itemStateIsNeutral = ... 

    if (itemStateIsNeutral) return QVariant(); 
    // else: 

    return QVariant(QBrush(item.color())); 
} 

您可能必須做回QVariant(QBrush()),而不是,我不知道這件事。

+1

返回QVariant()是好的,因爲這意味着該模型沒有具體的值 – crazyjul

+0

是的,返回'QVariant()'工作。 – Daemin

相關問題