gpt4 book ai didi

c++ - QAbstractTableModel::header 数据和 QML TableView

转载 作者:行者123 更新时间:2023-11-30 04:46:56 27 4
gpt4 key购买 nike

我有 QAbstractTableModel 的子类并提供了 headerData 覆盖:

/**
* @brief Obtains the header (columns) names.
* @param section: column number.
* @param orientation: Accepts only horizontal.
* @param role: Accepts only display.
* @return The column header text in case all params are valid.
* Otherwise empty QVariant.
*/
QVariant CVarTableModel::headerData(int section,
Qt::Orientation orientation,
int role) const
{
if (role != Qt::DisplayRole)
return QVariant();

if (orientation != Qt::Horizontal)
return QVariant();

if (section >= static_cast<int>(Columns::ZCOUNT))
return QVariant();

return QVariant::fromValue(static_cast<Columns>(section));
}

我正在尝试弄清楚如何让我的 QML TableView 组件利用此功能。有没有办法自动执行此操作?

最佳答案

使用宏 Q_INVOKABLE 从 QML 调用您的方法。然后,在您的 QML 中像使用任何其他方法一样使用它:

class Model: public QStandardItemModel
{
public:
Model(QObject* parent=nullptr): QStandardItemModel(parent)
{
setColumnCount(2);
setRowCount(2);
}

Q_INVOKABLE virtual QVariant headerData(int section,
Qt::Orientation orientation,
int role=Qt::DisplayRole) const override
{
qDebug() << section << orientation << role;
if (role != Qt::DisplayRole)
return QVariant();

if (section == 0)
return "First Column";
return "Not first column";
}
};
// In main.cpp
Model* model = new Model();

QQuickView *view = new QQuickView;

view->rootContext()->setContextProperty("myModel", model);

view->setSource(QUrl("qrc:/main.qml"));
view->show();
TableView {
TableViewColumn {
role: "title"
title: myModel.headerData(0, Qt.Vertical);
width: 100
}
TableViewColumn {
role: "author"
title: myModel.headerData(1, Qt.Vertical);
width: 200
}
model: myModel
}

关于c++ - QAbstractTableModel::header 数据和 QML TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56444985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com