qt5中 QMessageBox是否会导致内存溢出

qt5中 QMessageBox是否会导致内存溢出,第1张

Java中参数都是传值的,静态方法得到的引用是你外部调用它时传递的那个引用的复制品,是你的调用代码实际运行时才发生,静态方法结束后,复制出来的引用也会自然消失,至于它消失前所指的对象会不会变成垃圾,就看外围调用它的那个部分代码了。

在一定条件下,Java存在内存泄露,但是基本上不用很关心它,但是打开的文件,数据库连接等资源必须由程序员在适当的时候予以释放

这样用:

queryexec("select from student");

while(querynext())

{

qDebug() << queryvalue(0)toInt() << queryvalue(1)toString();

}

或者

if(querynext())

//开始就先执行一次next()函数,那么query指向结果集的第一条记录

{

}

意思是说,还有某查询引用默认数据库连接"qt_sql_default_connection"。

如果忽略该警告,Qt官方文档里也写了,可能会出现内存泄漏:

Warning: There should be no open queries on the database connection when this function is called,

otherwise a resource leak will occur

还是不出现这个警告的好。怎么把它弄没了呢?我把一切外围的对象都排除了:仅建立一个连接,打开它,然后关闭连接,调用removeDatabase()。居然还有警告!问题已经锁定在我关闭连接的语句上:

QSqlDatabase::removeDatabase(QSqlDatabase::database()connectionName());

默认连接的名字也是默认的,需要通过connectionName()函数获得。这样写貌似没什么问题,后来调试发现,QSqlDatabase::database()静态函数实际上使默认连接的引用计数+1。上述句子相当于:

QSqlDatabase db = QSqlDatabase::database();//获得实例。

QString name = dbconnectionName();//获得默认连接名。

QSqlDatabase::removeDatabase(name);//删除默认连接。

这样,问题就清晰了,db获得了一个引用,此时引用计数为2。在调用removeDatabase()时,db对象并没有被删除,默认连接的引用计数仍为2,于是报告警告信息。

我们只需将其改为:

QString name;

{

name = QSqlDatabase::database()connectionName();

}//超出作用域,隐含对象QSqlDatabase::database()被删除。

QSqlDatabase::removeDatabase(name);

问题就解决了!

如果直接打默认连接名的话,代码就简单多了,不过名字不太好打(再说了,万一Qt把默认连接名改了呢!):

QSqlDatabase::removeDatabase("qt_sql_default_connection");//不推荐。

我最近也在写qt。同样看过那篇文章。可是我写完之后一点错误没有啊。你确定你的标点没错?

void MainWindow::on_pushButton_5_clicked()//删除当前行

{

int curRow = ui->tableView->currentIndex()row();

//获取选中的行

model->removeRow(curRow);

//删除该行

int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定删除当前行吗?"),QMessageBox::Yes,QMessageBox::No);

if(ok == QMessageBox::No)

{

model->revertAll(); //如果不删除,则撤销

}

else

model->submitAll(); //否则提交,在数据库中删除该行

}

以上就是关于qt5中 QMessageBox是否会导致内存溢出全部的内容,包括:qt5中 QMessageBox是否会导致内存溢出、qt *** 作 数据库崩溃、QT访问MYSQL数据库为什么一打开子窗口访问数据库就出问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9755723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存