Изменение заголовка QAbstractTableModel с использованием роли - PullRequest
1 голос
/ 13 октября 2011

У меня есть подкласс

class TableModel : public QAbstractTableModel

Я переопределяю метод headerData следующим образом:

QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
   if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {...}
   if (role == TableModel::CurrencyRole && orientation == Qt::Horizontal) {...}
   return QVariant();
}

У меня есть метод, который устанавливает QTableView следующим образом, используя TableModel* table

void A::SetDisplay(QTableView* table_view, QString filter, int role, int sort_role)
{
  proxyModel = new QSortFilterProxyModel(this);
  proxyModel->setSourceModel(table);
  proxyModel->setDynamicSortFilter(true);
  proxyModel->setSortRole(sort_role);
  table_view->setModel(proxyModel);
  table_view->setSortingEnabled(true);
  table_view->setSelectionBehavior(QAbstractItemView::SelectRows);
  table_view->horizontalHeader()->setStretchLastSection(true);
  table_view->verticalHeader()->hide();
  table_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
  table_view->setSelectionMode(QAbstractItemView::SingleSelection);
  proxyModel->setFilterRegExp(QRegExp(filter, Qt::CaseInsensitive));
  proxyModel->setFilterKeyColumn(1);
  proxyModel->sort(0, Qt::AscendingOrder);
  connect( table_view->selectionModel(),
    SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
    this, SIGNAL(selectionChanged(QItemSelection)));
}

У меня есть два QTableView объекта ViewA и viewB. Мне нужно, чтобы ViewA имел заголовок с role == Qt::DisplayRole и viewB, чтобы иметь заголовок с role == TableModel::CurrencyRole. Как я могу изменить headerData для каждого представления, используя роль.

Спасибо, и, пожалуйста, дайте мне знать, если я пропустил какие-либо детали или что-то неясно в моем вопросе.

1 Ответ

3 голосов
/ 13 октября 2011

Прежде всего, похоже, что делать именно то, к чему вы пытаетесь, будет немного сложно.

После быстрого просмотра исходного кода Qt, похоже, нет никакого способа изменить роль, передаваемую функции headerData() вашей модели, просто используя API.

Однако у вас есть возможность создать подкласс QHeaderView, переопределить виртуальную функцию paintSection() и затем делать все, что вы захотите. Вам, вероятно, понадобится просмотреть реализацию Qt этой функции, чтобы узнать, как правильно ее реализовать.

На этом этапе вы можете установить представление заголовка для ваших представлений на новый пользовательский, а затем установить некоторый внутренний флаг из вашего представления, который говорит ему, как правильно вызвать headerData() с нужной вам ролью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...