您可以自定义一个继承自QSqlTableModel的类,并在其中实现一个函数来获取多个数据库的数据。以下是一个示例代码:

#include <QSqlTableModel>
#include <QList>

class CustomSqlTableModel : public QSqlTableModel
{
public:
    explicit CustomSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase()) 
        : QSqlTableModel(parent, db) {}

    QList<QList<QVariant>> getMultipleData(const QStringList &tables)
    {
        QList<QList<QVariant>> data;

        // 遍历多个表格
        for (const QString &table : tables) {
            // 设置当前表格
            setTable(table);
            // 设置排序
            setSort(0, Qt::AscendingOrder);
            // 提交所有挂起的操作
            submitAll();
            // 查询数据
            select();

            // 获取每一行的数据,并添加到data中
            for (int row = 0; row < rowCount(); ++row) {
                QList<QVariant> rowData;
                for (int column = 0; column < columnCount(); ++column) {
                    rowData.append(data(index(row, column)).toString());
                }
                data.append(rowData);
            }
        }

        return data;
    }
};

使用示例:

QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE", "db1");
db1.setDatabaseName("path_to_db1");
db1.open();

QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE", "db2");
db2.setDatabaseName("path_to_db2");
db2.open();

QList<QVariant> tables1 = db1.tables();
QList<QVariant> tables2 = db2.tables();

CustomSqlTableModel model1(nullptr, db1);
CustomSqlTableModel model2(nullptr, db2);

// 获取多个数据库的数据
QList<QList<QVariant>> data1 = model1.getMultipleData(tables1);
QList<QList<QVariant>> data2 = model2.getMultipleData(tables2);

在上述代码中,首先创建了两个QSqlDatabase对象,分别用于连接两个不同的数据库。然后通过调用tables()函数获取每个数据库中的表格名。接下来,创建了两个CustomSqlTableModel对象,并通过传递对应的QSqlDatabase对象来指定数据库连接。最后,调用getMultipleData()函数获取每个数据库中的多个表格的数据

自定义QSqlTableModel获取多个数据库数据到data中

原文地址: https://www.cveoy.top/t/topic/hIml 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录