这个问题困扰了一天,网上查了很多资料,解决方法如下;将:
QSqlQuery query;
query.exec(QString("select * from LCChamber where IsIdle=1 "));
query.next();
修改成:
QSqlQuery query(QString("select * from LCChamber where IsIdle=1 "),_db);
query.exec();
但是还是出现了以上问题。如果同一个线程类,有多个对象还是会提示上面这个问题,解决方案如下:
1.找到原因,提示的是DB不能在不同的线程中使用,那我们就可以在析构函数中将其关闭和移除
StateMachine::~StateMachine()
{
_db.close();
QSqlDatabase::removeDatabase("mysql");
qDebug()<<"~StateMachine";
}
2.有些没有没有走析构函数,是因为我们定义的是动态分配空间,该空间在线程结束时并没有释放,只有使用delete才会释放空间并且调用析构函数,所以我们将动态指针修改成静态就行。QT的析构函数还是没有android的好用,不到万不得已最好不使用。
before:StateMachine *_stateMachine = new StateMachine();
after:StateMachine _stateMachine;
3.最后还是不稳定,只能设置为全局变量。