qml tabelview根据C++自定义的headmodel显示表头
在QML中,可以使用C++自定义的headmodel来显示表头。下面是一个简单的示例:
假设我们有一个C++类HeadModel,用于提供表头数据:
class HeadModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit HeadModel(QObject *parent = nullptr);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QHash<int, QByteArray> roleNames() const override;
private:
QStringList m_headers;
};
HeadModel::HeadModel(QObject *parent)
: QAbstractListModel(parent)
{
m_headers << "Column 1" << "Column 2" << "Column 3";
}
int HeadModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid())
return 0;
return m_headers.count();
}
QVariant HeadModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() < 0 || index.row() >= m_headers.count())
return QVariant();
if (role == Qt::DisplayRole)
return m_headers.at(index.row());
return QVariant();
}
QHash<int, QByteArray> HeadModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[Qt::DisplayRole] = "display";
return roles;
}
然后,在QML中使用TableView来显示表格,并使用自定义的headmodel来显示表头:
import QtQuick 2.15
import QtQuick.Controls 2.15
TableView {
id: tableView
width: 400
height: 300
TableViewColumn {
role: "display"
title: "Column 1"
width: 100
}
TableViewColumn {
role: "display"
title: "Column 2"
width: 100
}
TableViewColumn {
role: "display"
title: "Column 3"
width: 100
}
model: HeadModel {}
}
在这个示例中,TableView的列使用了TableViewColumn,并且通过role属性指定了要显示的数据。HeadModel实例作为TableView的model,用于提供表头数据
原文地址: https://www.cveoy.top/t/topic/hJXR 著作权归作者所有。请勿转载和采集!