2013-11-14 43 views
1

當顯示數據,在一個QTableView中,由於內部的原因,我無法顯示的第一行,因此具有隱藏它,使用更改行標籤起始索引(垂直插頭)在QTableView中

(qtableobj)->hideRow(0); 

的問題是,現在行標籤從2

enter image description here

開始怎麼可能從1開始的索引,同時保持第一排隱藏?

謝謝。

+1

如果引入'QSortFilterProxyModel'來過濾第一行怎麼辦? – vahancho

+0

是的,我明白它可以在模型和視圖之間過濾數據,只要模型中的數據沒有改變,我就可以使用它,當然不需要做太多的返工....你能演示一個演示怎麼做?謝謝 ! –

回答

1

您可以嘗試涉及QSortFilterProxyModel,它會過濾掉模型中的第一行。 的代碼可能看起來像:

class FilterModel : QSortFilterProxyModel 
{ 
[..] 
protected: 
    bool filterAcceptsRow(int sourceRow, const QModelIndex & sourceParent) const 
    { 
     QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); 
     if (index.row() == 0) // The first row to filter. 
      return false; 
     else 
      return QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); 
    } 
} 

最後,您需要這種模式設爲您的表視圖:

QTableView *table = new QTableView; 
MyItemModel *sourceModel = new MyItemModel; 
QSortFilterProxyModel *proxyModel = new FilterModel; 

proxyModel->setSourceModel(sourceModel); 
table->setModel(proxyModel); 

UPDATE

由於問題是如何標題視圖顯示行號,這裏是基於模型中對標題數據的特殊處理的替代解決方案:

class Model : public QAbstractTableModel 
{ 
public: 
    [..] 
    virtual QVariant headerData(int section, Qt::Orientation orientation, 
           int role = Qt::DisplayRole) const 
    { 
     if (role == Qt::DisplayRole) { 
      if (orientation == Qt::Vertical) { 
       // Decrease the row number value for vertical header view. 
       return section - 1; 
      } 
     } 
     return QAbstractTableModel::headerData(section, orientation, role); 
    } 
    [..] 
}; 

用隱藏的第一行設置表視圖。

QTableView *table = new QTableView; 
Model *sourceModel = new Model; 
table->setModel(sourceModel); 
table->hideRow(0); 
table->show(); 
+0

對不起,昨天沒有正確測試,我subclassed QProxymodel,並按照上述步驟..我面臨同樣的問題,行1是隱藏的,但行編號從兩個 –

+0

@BeagleBone開始,請看看上面更新的答案。 – vahancho

+0

謝謝......我以另一種方式解決了這個問題,但答案看起來不錯,應該工作:) –