C++ QAbstractTableModel::标头数据和QML TableView
我对C++ QAbstractTableModel::标头数据和QML TableView,c++,qt,qml,C++,Qt,Qml,我对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 hea
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));
}
/**
*@brief获取标题(列)名称。
*@param节:列号。
*@param方向:仅接受水平方向。
*@param角色:只接受显示。
*@如果所有参数都有效,则返回列标题文本。
*否则为空。
*/
QVariant CVarTableModel::headerData(内部部分,
Qt::方向,
int角色)常量
{
if(角色!=Qt::DisplayRole)
返回QVariant();
if(方向!=Qt::水平)
返回QVariant();
如果(节>=静态转换(列::ZCOUNT))
返回QVariant();
返回QVariant::fromValue(静态_cast(section));
}
我正在试图找出如何使我的QML
TableView
组件利用此功能。有没有办法自动执行此操作?通过使用宏Q\u 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";
}
};
谢谢你的回答。我现在就是这样做的。我想知道是否有一种方法可以使
TableView
达到它本身。
// 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
}