QAbstractTableModel headerData удаляет заголовок - PullRequest
1 голос
/ 12 апреля 2019

Я сейчас пытаюсь сделать ви на основе 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);
}

Изображение:
enter image description here

Реализация, где показан заголовок, но пустой:

QVariant BossListModel::headerData(int section, Qt::Orientation orientation, int role) const {
    return QVariant();
}

Изображение:
enter image description here

Что я сделал не так? Почему заголовок невидим, когда я пытаюсь назвать его?

1 Ответ

2 голосов
/ 12 апреля 2019

Ваше переопределение headerData должно проверять на role == Qt::DisplayRole и возвращать желаемый контент только в случае true, в противном случае возвращать нулевой вариант.

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