2013-11-14 1 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

извините, вчера не проверил правильно, я подклассифицировал QProxymodel и выполнил описанные выше шаги. I сталкивается с той же проблемой, строка 1 скрыта, но нумерация строк начинается с двух –

+0

@BeagleBone, пожалуйста, взгляните на обновленный ответ выше , – vahancho

+0

Спасибо ... я решил это по-другому, но ответ выглядит правильно и должен работать :) –