Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt C++;-在一个视图中显示多个SQLite表中的数据_C++_Qt_Sqlite_Qtsql - Fatal编程技术网

C++ Qt C++;-在一个视图中显示多个SQLite表中的数据

C++ Qt C++;-在一个视图中显示多个SQLite表中的数据,c++,qt,sqlite,qtsql,C++,Qt,Sqlite,Qtsql,Qt版本:5.8 假设我有以下SQL表 -- People person_id | first_name | last_name | age -- Cars, person_id is a foreign key to show that this person owns this car car_id | car_year | car_make | car_model | person_id 假设我想用这样的混合数据填充下面的表视图或表小部件 // Table that the user

Qt版本:5.8

假设我有以下SQL表

-- People
person_id | first_name | last_name | age

-- Cars, person_id is a foreign key to show that this person owns this car
car_id | car_year | car_make | car_model | person_id
假设我想用这样的混合数据填充下面的表视图表小部件

// Table that the user sees. Notice that not all the information from the tables is shown.
first_name | last_name | car_year | car_make | car_model
最好的/推荐的方法是什么?我可以看到以下两种方法,但我觉得这两种方法都不是最好的方法

  • 使用表格小部件,它是一个默认模型的基于项目的表格视图。要做到这一点,我猜我需要进行QSqlQuerys以从我的QSqlDatabase获取数据,并以这种方式填充表格小部件
  • 使用表视图,这需要我为视图的数据模型创建自己的QSqlTableModel。根据QSqlTableModel的文档,它是一个高级接口,用于从单个表读取和写入数据库记录。这意味着我需要两个QSqlTableModels,上面的每个表一个。但是,表视图只能使用一个模型,它将显示该模型中的所有数据。我认为唯一可行的方法是将这些表合并成一个表,其中只包含我希望用户看到的信息。我觉得那样会很难看,但也有可能。在这种情况下,我应该总共有三个表吗?上面的两个加上合并的一个,让用户看到吗

  • 我觉得#1是这两者中的佼佼者,但我想知道是否还有比这两者更好的方法。

    如果
    person\u id
    是table
    people
    的主键,您可以使用
    QtSql.QsqlRelationalTableModel
    qtwidget.QTableView
    中显示多个表中的数据,以下是您的示例:

    QSqlRelationalTableModel rm = new QSqlRelationalTableModel(parentObject, database);
    rm→setTable(„cars“);
    rm→setRelation(4, QSqlRelation(„people“, „person_id“, „first_name, last_name“);
    rm→select();
    QTableView tv = new QTableView();
    tv→setModel(rm);
    tv→hideColumn(0);           # hide column car_id
    hh = tv->horizontalHeader();
    hh→moveSection(4, 0);       # change order of columns
    hh→moveSection(5, 1);
    
    可能重复的