关于#qt#的问题,请各位专家解答!

多次访问数据库后,内存严重增加,看了网上的内存清空,一直没有什么效果,各位看看啥原因啊

img

应用程序在多次访问数据库时未正确释放数据库连接或未正确管理内存所导致的

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/193320
  • 这篇博客也不错, 你可以看下为了这篇关于QT最全面的项目实战总结,成功加入脱发大军!不看也给我先收藏起来!
  • 除此之外, 这篇博客: 基于Qt的多线程以及互锁机制中的 一.在项目中添加一个线程类 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述
    1.继承QThread在这里插入图片描述
    2.在Qt 5中是没有现成的QThread,需要自己手动添加
    在这里插入图片描述
    3.构造函数隐式转换
    在这里插入图片描述
    4.run()函数
    1)在线程中,先执行构造函数,再执行run()函数
    2)我这种写法forever()是Qt中自带的循环,类似与for .

    void robThread::run()
    {
        forever
        {
             qDebug()<<"current thread ID************:"<<QThread::currentThreadId();
             if(m_bPause)
             {
              qDebug()<<"this  is  a thread 1111 "<<index;
              //信号在自己的头文件中声明
              emit captured(index);
              sleep(1);
        //      msleep(100);
        //      usleep(1000);
              index++;
               }
              else
               {
                  qDebug()<<"this  is break!";
                   emit isDone();
                  break;
    
              }
             //信号在自己的头文件中声明
    
        }
       // exec();
    }
    void robThread::Stream()
    {
        m_bPause = true;
    }
    
    void robThread::stop()
    {
        m_bPause=false;//判断一个bool变量
    }
    

    3)设置bool变量停掉forever()
    4)exec()函数,是程序阻塞,等待事件发生,若添加exec()后,程序在关掉窗口前不会终止,等待事件发生,比如按钮点击事件等。这里写在线程run()函数末尾,表示阻塞住线程,等待接受指令,一般都是在等待线程启动(start)或停止(exit)
    5)线程类要在主函数头文件中声明。
    在这里插入图片描述

    5.第二种方式建立线程类
    1)首先同上面一样添加一个类,但不需要继承QThread
    2)在头文件中声明QThread对象以及类对象

    private:
        Ui::MainWindow *ui;
    
        camerathread *m_pcamerathread;
        QThread * m_pCapThread;
        //newclase *m_pnewclase;
    

    3)在cpp文件中将类对象添加进QThread
    在这里插入图片描述

  • 您还可以看一下 梅会东老师的Qt高级系列之8:Qt多线程线程池数据同步机制及文件下载器项目实战课程中的 断点续传及配置文件的讲解小节, 巩固相关知识点

首先你要定位到你的数据库文件位置,很多人写Qt数据库,连自己文件在哪都不知道,连没连上删没删掉都凭感觉,有时候你通过代码删除数据库时只是一个新生成的,删除肯定没用啊,仍有问题可私聊