QT多次触发信号槽 or 内存泄漏?

记录一下遇到的问题:

在打开子窗口后点击它的一个按钮传值过来,结果输出了多次,而且是1/2/3…一次增长的输出次数。
一开始以为是信号槽多次触发,于是给每个connect都设置了:

connect(this,SIGNAL(sendStr(QString)),&form,SLOT(getStr(QString)),Qt::UniqueConnection);

Qt::UniqueConnection 用于避免多次重复连接。

后来发现并不是这个问题,而每一次打开子窗口,点击其中的按钮,再关闭窗口,再打开时点击按钮,输出就会增加一个。是因为每一次创建子窗口时,在关闭( close() )后只是关闭了窗口部件,并没有销毁它的指针(容易导致内存泄漏),导致每一次打开它都会新申请内存创建一个新的它。

解决方法是:
子窗口->setAttribute(Qt::WA_DeleteOnClose);
将窗口属性设置为关闭即销毁它的指针,释放内存。

查阅的原文链接:

Qt中子窗口关闭之后,立即释放资源的方法

https://blog.csdn.net/qq_27905767/article/details/88635420

②【QT】一次信号执行多次槽函数的问题

https://blog.csdn.net/qq_43627385/article/details/103195768?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159789435419724843344615%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159789435419724843344615&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v3-4-103195768.pc_ecpm_v3_pc_rank_v3&utm_term=qt%E4%BF%A1%E5%8F%B7%E6%A7%BD%E5%A4%9A%E6%AC%A1%E8%A7%A6%E5%8F%91&spm=1018.2118.3001.4187
短链接:http://suo.im/6fHz2G

你可能感兴趣的:(qt,c++,嵌入式,内存泄漏)