不是说连接名可以跨线程吗,我主线程打开数据库的一个物理连接之后,在主线程中isOpen()返回true,辅线程返回false,难道后面的版本(我用的是Qt5.15.2)连接名又不能跨线程了。
 
主线程:
 
QString MainWindow::connectionName = "1";
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    {
        QSqlDatabase db;
        if (QSqlDatabase::contains(connectionName))
        {
            db = QSqlDatabase::database(connectionName);
        }
        else
        {
            db = QSqlDatabase::addDatabase("QSQLITE", connectionName);
        }
 
        QString exepath = QApplication::applicationDirPath();
        db.setDatabaseName(exepath+"/zhu-hai_gao-lan-gang_gree_label.db");
        bool ok = db.open();
        if (!ok) {
            QString errStr = db.lastError().text();
            qDebug()<<errStr;
        }
    }
 
 
    QSqlDatabase db = QSqlDatabase::database(connectionName);    if (db.isOpen())
        qDebug() << "数据库打开";    else
        qDebug() << "数据库关闭";}
 
辅线程:
 
void MainWindow::on_pushButton_clicked()
{
    QFuture<void> res = QtConcurrent::run([&]()
                                          {
                                              QString connection = MainWindow::connectionName;
                                              QSqlDatabase db1 = QSqlDatabase::database(connection);
                                              if (db1.isOpen())
                                                  qDebug() << "数据库打开";
                                              else
                                                  qDebug() << "数据库关闭";
                                          });
}
不应该是数据库打开吗?