【问题标题】:QtQuick setting up model in TableViewQtQuick 在 TableView 中设置模型
【发布时间】:2023-03-15 06:25:02
【问题描述】:

所以我在 qmlfile 上有一个 tableview,我正在尝试从 c++ 设置模型。

我使用的模型是 QSqlTableModel,如果创建一个新的 tableview 并从 c++ 设置模型,它似乎可以工作,但是当我将模型传递给 qmlfile 中的模型属性时它不起作用,我可以不知道为什么...

c++模型代码为:

QSqlTableModel * SqlEventModel::getTableData(QString tableName, QTableView *item){

    const QString queryStr = "SELECT sql FROM sqlite_master WHERE tbl_name = '" + tableName +"' AND type = 'table'" ;
    QSqlQuery query(queryStr);
    if (!query.exec())
        qFatal("Query failed");


    QSqlDatabase db = QSqlDatabase::database(":memory:");

    QSqlTableModel *model = new QSqlTableModel(item, db);
    model->setTable(tableName);
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();


    int i=0;
    while (query.next()){
        model->setHeaderData(i, Qt::Vertical, query.value(i).toString());
        i++;
    }

   return   model;

}

如果在 c++ 中创建一个表格视图并分配模型,则返回一个有效的模型,但是当我这样做时:

TableView{
    id: table;
    width: parent.width -100
    height: parent.height -200
    anchors.horizontalCenter: parent.horizontalCenter
    anchors.top: parent.top
    anchors.topMargin: 90
    model: SqlEventModel.getTableData(GData.tName,table)
}

它不起作用,它只是显示一个空表,即使我调试 tableview 模型不是空的......

如果我添加:

QTableView *view =  new QTableView();
view->setModel(model);
view->show();

就在 c++ 函数返回之前,我得到一个新窗口,其中包含一个正确显示该表的表格...我尝试添加具有相同角色名的列,我在 c++ 中给出了相同的角色名,但它们也不会填充... . 这是两张表的截图

【问题讨论】:

    标签: c++ qt qml qtableview qsqltablemodel


    【解决方案1】:

    您需要使用TableViewColumn 指定要显示的列。这记录在TableView's documentation:

    TableView {
        TableViewColumn {
            role: "title"
            title: "Title"
            width: 100
        }
        TableViewColumn {
            role: "author"
            title: "Author"
            width: 200
        }
        model: libraryModel
    }
    

    【讨论】:

    • 不起作用,如果我在 c++ 代码中添加这三行:" QTableView *view = new QTableView(); view->setModel(model); view->show(); " 出现一个带有表格的新视图,但我在 qml 上创建的窗口上的那个似乎不起作用
    • 你需要提供一个完整的例子。
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2015-02-23
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多