3

我有 3 张桌子:

在此处输入图像描述

我想在 GUI 上使用QTableView和显示订单表(订单的开始和结束日期、用户的姓氏、服务名称和服务价格) QSqlRelationalTableModel。这是我设置表格和视图的地方:

this->ordersTable = new QTableView(this);
this->model = new QSqlRelationalTableModel(this, db->getDB());
this->model->setTable("ORDERS");
this->model->setRelation(3, QSqlRelation("USERS", "id", "lastname"));
this->model->setRelation(4, QSqlRelation("SERVICE", "id", "name"));
this->model->setRelation(4, QSqlRelation("SERVICE", "id", "price"));
this->model->select();
this->ordersTable->setModel(this->model);
this->ordersTable->hideColumn(0);

但是当我进行第三次setRelation调用时,它似乎覆盖了第二次调用:我只能在 GUI 上看到价格,而不是名称和价格。我需要将服务表中的名称和价格这两个字段放到我的视图中。

4

2 回答 2

4

尝试这个:

this->model->setRelation(4, QSqlRelation("SERVICE", "id", "name, price"));
于 2016-03-19T11:16:53.033 回答
2

似乎setRelation只用于解析一个外键,但您想添加两列。在这种情况下,您可以使用QSqlQueryModel自己的自定义查询。

QSqlQueryModel model;
QString q = "your sql query";
model.setQuery(q, db->getDB());
tableView->setModel(model);

对于查询,您可以通过简单的内部连接查询来实现您的目标。

SELECT O.ID, O.START_TIME, O.END_TIME, U.LASTNAME, S.NAME, S.PRICE
    FROM ORDERS O
        INNER JOIN USERS U
            ON O.USER_ID = U.ID
        INNER JOIN SERVICE S
            ON O.SERVICE_ID = S.ID
于 2016-02-21T16:30:37.617 回答