不是说连接名可以跨线程吗,我主线程打开数据库的一个物理连接之后,在主线程中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() << "数据库关闭";
});
}
不应该是数据库打开吗?