2012-09-27 8 views
5

मेरे पास QTableView है जिसमें 4 पंक्तियां और 4 कॉलम हैं, जिनमें प्रत्येक डेटा उनके डेटा का प्रतिनिधित्व करता है। डिफ़ॉल्ट रूप से QTableView संपादन योग्य है। अब मैं अपने QTableView में कोई विशेष कॉलम गैर संपादन योग्य नहीं बनाना चाहता हूं।क्यूटी - मैं अपने QTableView का एक विशेष कॉलम गैर संपादन योग्य के रूप में कैसे बना सकता हूं?

मैं यह कैसे कर सकता हूं?

अग्रिम में धन्यवाद।

उत्तर

7

आप setItemDelegateForColumn() फ़ंक्शन का उपयोग कर सकते हैं। केवल पढ़ने के लिए प्रतिनिधि को कार्यान्वित करें, और इसे आवश्यक कॉलम के लिए सेट करें।

आप अपने मॉडल के अंदर the flags का भी उपयोग कर सकते हैं, और एक विशिष्ट कॉलम के लिए Qt::ItemIsEditable ध्वज हटा सकते हैं।

+0

केवल पढ़ने-योग्य प्रतिनिधि को कैसे कार्यान्वित करें। कोई उदाहरण? – oya163

0

ओवरइड विधि में इसे if(!(index.column() == 0) पर बदलें और Flag मान Flag |= Qt::ItemisEditable के रूप में बदलें।
यह ठीक काम करता है।

+0

मुझे लगता है कि आप 'बूल QAbstractItemView :: संपादित करें (कॉन्स QModelIndex और अनुक्रमणिका, EditTrigger ट्रिगर, QEvent * घटना) ओवरराइड करना मतलब था? ऐसे मामले में आप केवल पढ़ने के लिए कॉलम के लिए 'झूठी' वापस कर सकते हैं। –

1

इस देर हो सकता है, लेकिन भविष्य के संदर्भ के लिए। आप NoEditTrigger इस तरह के तालिका दृश्य निर्धारित करना चाहिए:

ऐसा
myTableView->setModel(model); 
myTableView->setEditTriggers(QAbstractItemView::NoEditTriggers) 
+0

वाह, यह अब तक का सबसे साफ समाधान है, विशेष रूप से यदि आप केवल उसी मॉडल पर अपने विचारों के _one_ में डेटा को पढ़ना चाहते हैं। धन्यवाद! –

+4

लेकिन ओपी पूछता है, लेकिन इस विधि को एक कॉलम या पंक्ति पर कैसे लागू किया जा सकता है? –

5

कुछ भी यह कर सकते हैं:

class NotEditableDelegate : public QItemDelegate 
{ 
    Q_OBJECT 
public: 
    explicit NotEditableDelegate(QObject *parent = 0) 
     : QItemDelegate(parent) 
    {} 

protected: 
    bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) 
    { return false; } 
    QWidget* createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const 
    { return Q_NULLPTR; } 

}; 

उपयोग में:

// Make all the columns except the second read only 
for(int c = 0; c < view->model()->columnCount(); c++) 
{ 
    if(c != 1) 
     view->setItemDelegateForColumn(c, new NotEditableDelegate(view)); 
} 
2

सबसे आसान तरीका है झंडा settting है जिस आइटम को आप इस तरह से संपादन योग्य नहीं करना चाहते हैं:

item->setFlags(item->flags() & ~Qt::ItemIsEditable); 

आप यह धागा भी देख सकते हैं: Qt How to make a column in QTableWidget read only

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