2012-07-23 23 views
14

मैं एक QAbstractTableModel प्रदर्शित करने के लिए QTableView उपयोग कर रहा हूँ:कॉलम द्वारा QTableView को कैसे क्रमबद्ध करें?

#include <QtGui/QApplication> 
#include <QAbstractTableModel> 
#include <QTableView> 

class TestModel : public QAbstractTableModel 
{ 
public: 
    int rowCount(const QModelIndex &parent = QModelIndex()) const 
    { 
     return 2; 
    } 
    int columnCount(const QModelIndex &parent = QModelIndex()) const 
    { 
     return 2; 
    } 
    QVariant data(const QModelIndex &index, int role) const 
    { 
     switch (role) 
     { 
     case Qt::DisplayRole: 
     { 
      return 4 - index.row() + index.column(); 
     } 
     } 
     return QVariant(); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QTableView table; 
    TestModel model; 
    table.setModel(&model); 
    table.setSortingEnabled(true); 
    table.sortByColumn(0, Qt::AscendingOrder); 
    table.reset(); 
    table.show(); 

    return a.exec(); 
} 

The displayed widget

समस्या यह है कि परिणाम बिल्कुल वैसा ही है है जब मैं का उपयोग करें:

table.sortByColumn(0, Qt::AscendingOrder); 

या

table.sortByColumn(0, Qt::DescendingOrder); 

या

table.sortByColumn(1, Qt::AscendingOrder); 

या

table.sortByColumn(1, Qt::DescendingOrder); 

क्या मैं गलत कर रहा हूँ?

उत्तर

14

QAbstractTableModel एक खाली sort() कार्यान्वयन प्रदान करता है।

करने का प्रयास करें

TestModel model; 
QSortFilterProxyModel proxyModel; 
proxyModel.setSourceModel(&model); 
table.setModel(&proxyModel); 
+0

धन्यवाद! यह काम करता हैं! लेकिन मैं क्या गलत कर रहा था? मेरा कोड क्यों काम नहीं करता है? मैंने QTableView और QAbstractTableModel दोनों के दस्तावेज़ों को ऊपर और नीचे पढ़ा है, लेकिन क्यों नहीं पता चला। –

+0

यदि मैं इसे सही ढंग से समझता हूं, तो QTableView केवल QAbstractTableModel के खाली सॉर्ट() फ़ंक्शन को कॉल करता है? यह अपने आप पर कोई सोटिंग नहीं करता है? –

+1

हां बिल्कुल। QSqlTableModel में एक प्रकार का कार्यान्वयन iirc है, इसलिए सॉर्टिंग प्रॉक्सी मॉडल के बिना वहां काम करता है। हालांकि, जैसा कि आप अपने मॉडल का उपयोग कर रहे हैं, आपको एक QSortFilterProxyModel की आवश्यकता है - जैसा कि नाम से पता चलता है - इसमें एक सॉर्टिंग कार्यान्वयन भी है। –