Я сейчас пытаюсь сделать ви на основе QTableView
. Поэтому я использую QAbstractTableModel
для хранения данных. Моя проблема в том, что как только я возвращаю что-то еще из QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
, чем QVariant()
, заголовок исчезает, как это было бы при вызове hide. Я не понимаю этого поведения.
Реализация, где заголовок невидим:
class BossListModel : public QAbstractTableModel {
Q_OBJECT;
private:
EvtcData header;
public:
BossListModel(QObject *parent = nullptr);
int rowCount(const QModelIndex &parent) const override;
int columnCount(const QModelIndex &parent) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
QVariant data(const QModelIndex &index, int role) const override;
};
QVariant BossListModel::headerData(int section, Qt::Orientation orientation, int role) const {
if(orientation == Qt::Horizontal) {
switch(section) {
case 0:
return QString("Name");
case 1:
return QString("Time");
case 2:
return QString("Result");
default:
return QVariant();
}
}
return QVariant();
}
Вот как я устанавливаю listView и ItemModel внутри конструктора MainWindow:
void MainWindow::createTable() {
bossListModel = new BossListModel(this);
proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(bossListModel);
tableView = new QTableView;
tableView->setModel(proxyModel);
tableView->verticalHeader()->hide();
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
tableView->setSortingEnabled(true);
setCentralWidget(tableView);
}
Изображение:
Реализация, где показан заголовок, но пустой:
QVariant BossListModel::headerData(int section, Qt::Orientation orientation, int role) const {
return QVariant();
}
Изображение:
Что я сделал не так? Почему заголовок невидим, когда я пытаюсь назвать его?