![](/img/trans.png)
[英]QML TableView + QAbstractTableModel - how edit model data from QML?
[英]QML TableView from file
早上好,
我從文件創建表視圖時遇到一些問題。
基本上我只是有一個按鈕來加載csv文件,我想在QML TableView中顯示這些文件...
我認為我的主要問題是我有動態的列數。
TableView
{
id: tableView
enabled: dynVars.csvVarTableModel.b_csvEnabled
frameVisible: false
sortIndicatorVisible: false
model: dynVars.csvVarTableModel
resources:
{
var roleList = dynVars.csvVarTableModel.roleStringList
var temp = []
for(var i=0; i<roleList.length; i++)
{
var role = roleList[i]
temp.push(columnComponent.createObject(tableView, { "role": role, "title": role}))}
return temp
}
}
}
columnComponent只是一個簡單的TableViewColumn ...我使用了QAbstractTableModel。 到目前為止,我已經完成了所有基本工作,重新實現了以下功能:
public:
int rowCount (const QModelIndex &parent = QModelIndex()) const;
int columnCount (const QModelIndex &parent = QModelIndex()) const;
// QVariant headerData(int section, Qt::Orientation orientation, int role) const;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
private:
QHash<int, QByteArray> roleNames() const;
我試圖重載roleNames函數,以便每個Column都有一個角色。 這就是我理解文檔的方式...
QHash<int,QByteArray> CSVVarTableModel::roleNames() const
{
QHash<int, QByteArray> roles = QAbstractTableModel::roleNames();
for(int i = 0; i < m_v_headers.size();i++)
roles[i + Qt::UserRole] = m_v_headers.at(i).toLatin1();
return roles;
}
在data()中,我只是返回m_vv_table.at(index.row()).at(role);
如果角色是UserRoles之一...
這對於我加載到表中的第一個csv文件來說效果很好...但是之后,當我要加載另一個文件時,似乎RoleNames在QML中沒有更新。 我已經嘗試了幾種組合來解決此問題...這也是為什么我目前沒有一個好的代碼示例的原因,這一切有點混在一起...
我可能以一種完全錯誤的方式,我無法想象加載一些簡單的文件是如此的復雜。
如果有人給出提示或一個小例子,這將是非常棒的事情,即如何使用動態數量的列加載文件。
親切的問候,
萌
您可以在模型更改事件中動態添加列。
我的項目中的示例:
onModelChanged: {
for(var index = tableView.columnCount-1; index>=0; index--) {
tableView.removeColumn(index)
}
for(var i = 0; i< model.columnCount(); i++) {
tableView.addColumn(columnComponent.createObject(
{
"title":model.headerData(i, 1).toString(),
"role":model.headerData(i, 1).toString(),
"delegate": textDelegate,
"movable": false
})
)
}
}
有關在qml中使用c ++模型的所有其他信息,請參閱Qt文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.