簡體   English   中英

來自文件的QML TableView

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM