Вы можете попытаться включить 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();
Что делать, если ввести 'QSortFilterProxyModel', который будет фильтровать первую строку? – vahancho
да, я понимаю, что он фильтрует данные между моделью и представлением, я в порядке с ним, пока данные в модели не изменены, и, конечно, не нужно много переделывать ... Можете ли вы продемонстрировать демонстрацию как это делается? Благодаря ! –