2011-11-02 6 views
6

से एक छवि प्रदर्शित करना मैं QAbstractTableModel से एक छवि प्रदर्शित करने का प्रयास कर रहा हूं। मैंने QPixmap को QVariantdata() के रूप में वापस करने का प्रयास किया, लेकिन यह केवल खाली कोशिकाओं का उत्पादन करता है, जब मैं दूसरे कॉलम में प्रत्येक सेल को 20x20 ब्लैक स्क्वायर रखने की अपेक्षा करता हूं।एक QAbstractTableModel

QVariant MySqlTableModel::data(const QModelIndex &idx, int role = Qt::DisplayRole) const 
{ 
    if (role == Qt::DisplayRole && idx.column() == 1) { 
     QPixmap pixmap(20,20); 
     QColor black(0,0,0); 
     pixmap.fill(black); 
     return pixmap; 
    } 

    return QSqlTableModel::data(idx, role); 
} 

उत्तर

5

केवल QVariant कि स्ट्रिंग के लिए परिवर्तित किया जा सकता मानक प्रतिनिधि के साथ भूमिका Qt::DisplayRole वापसी की जा सकती:

यह वर्तमान में मेरे कोड है।

आप भूमिका के लिए यह लौटने Qt::DecorationRole

QVariant MySqlTableModel::data(const QModelIndex &idx, int role = Qt::DisplayRole) const 
{ 
    if (idx.column() == 1) { 
     if (role == Qt::DecorationRole) { 
      QPixmap pixmap(20,20); 
      QColor black(0,0,0); 
      pixmap.fill(black); 
      return pixmap; 
     } else if (role == Qt::DisplayRole) { 
      // For Qt::DisplayRole return an empty string, otherwise 
      // you will have *both* text and image displayed. 
      return ""; 
     } 
    } 

    return QSqlTableModel::data(idx, role); 
} 

द्वारा छवि दिखाने या खुद पेंटिंग करने के लिए अपने स्वयं के प्रतिनिधि लिख सकते हैं। अधिक जानकारी के लिए QStyledItemDelegate documentation देखें।

+0

हाँ मुझे लगा कि यह एक प्रतिनिधि के साथ किया जा सकता है, लेकिन यह ओवरकिल की तरह लग रहा था। मुझे लगता है कि कोई आसान तरीका नहीं है? साथ ही, अगर मैं केवल एक विशिष्ट कॉलम को प्रतिनिधि को लागू करना चाहता हूं, तो क्या ऐसा करने का कोई तरीका है? वर्तमान में मैंने setItemDelegate का उपयोग करके प्रतिनिधि को पूरे टेबल व्यू में सेट कर दिया है। फिर मुझे मॉडल के डेटा() फ़ंक्शन के साथ-साथ प्रतिनिधि के पेंट() फ़ंक्शन में कॉलम चेक (यह देखने के लिए कि छवियों में कौन सा कॉलम प्रदर्शित होता है) - यह कोड डुप्लिकेशन की तरह लगता है ... वहां है एक बेहतर तरीका है? –

+0

एक प्रतिनिधि का उपयोग किए बिना 'क्यूटी :: सजावट रोल 'का उपयोग करना आसान तरीका है। लेकिन आप 'setItemDelegateForColumn' वाले कॉलम के लिए एक प्रतिनिधि सेट कर सकते हैं। – alexisdm

+0

आह, मैं setItemDelegateForColumn को कैसे याद कर सकता हूं? धन्यवाद! –

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