2009-09-09 9 views
5

में कुछ इंडेक्स के लिए कस्टम टेक्स्ट रंग मैं एक कस्टम रंग (प्रत्येक पंक्ति से संबंधित डेटा के आधार पर) का उपयोग कर QTreeView विजेट में कॉलम में से किसी एक में ग्रंथों को आकर्षित करना चाहता हूं। मैं drawRow() की रक्षा की विधि को ओवरलोड और इस तरह शैली विकल्प पैरामीटर (एक छीन नीचे उदाहरण) को बदलने की कोशिश:QTreeView

virtual void drawRow(QPainter* p_painter, const QStyleOptionViewItem& option, 
        const QModelIndex& index) const 
{ 
    QStyleOptionViewItem optionCustom = option; 
    if (index.column() == 2) 
    { 
     optionCustom.palette.setColor(QPalette::Text, Qt::red); 
    } 
    QTreeView::drawRow(p_painter, optionCustom, index); 
} 

लेकिन स्पष्ट रूप से मैं इस वजह से कुछ याद आ रही है काम करने के लिए प्रतीत नहीं होता है (मैं करने की कोशिश की QPalette::WindowText रंग भूमिका भी बदलें)।

उत्तर

10

अपने मॉडल में, Qt::ForegroundRole भूमिका के रूप में दिए गए रंग को वापस करने के लिए data() फ़ंक्शन का विस्तार करें।

उदाहरण के लिए:

virtual QVariant MyModel::data(const QModelIndex &index, int role) const 
{ 
    if (index.isValid() && role == Qt::ForegroundRole) 
    { 
     if (index.column() == 2) 
     { 
      return QVariant(QColor(Qt::red)); 
     } 
     return QVariant(QColor(Qt::black)); 
    } 

    return QAbstractItemModel::data(index, role); 
} 
+0

धन्यवाद! मुझे नहीं पता था कि 'डेटा() 'विधि का उपयोग आइटम की उपस्थिति के लिए भी किया जाता है। मैंने एक कस्टम आइटम प्रतिनिधि का उपयोग करके एक ओवरराइड 'पेंट()' विधि के साथ कार्यान्वित किया था, लेकिन 'डेटा()' विधि का उपयोग करना कभी भी अधिक सुरुचिपूर्ण है। –

+0

@ VladoKlimovský हाँ लेकिन कुछ शुद्धवादी हैं जो नहीं सोचते कि इसे उपस्थिति के लिए इस्तेमाल किया जाना चाहिए, क्योंकि वे सामग्री और उपस्थिति को अलग से संभालना चाहते हैं (मॉडल बनाम प्रतिनिधि)। – neuronet

संबंधित मुद्दे