找回密码
 立即注册
收起左侧

QMimeData问题:new了一个QMimeData,是否需要释放

4
回复
1316
查看
[复制链接]

尚未签到

来源: 2022-9-16 10:39:48 显示全部楼层 |阅读模式
1Qter豆
使用 QMimeData 复制文件到剪贴板,先new了一个QMimeData 对象,将对象数据放到剪贴板后,如果在最后释放掉 data,就会导致剪贴板里没有数据,请问一下QMimeData申请内存不释放会内存泄漏吗?
代码如下:
    QList<QUrl> copyfile;
    QUrl url=QUrl::fromLocalFile("G:\\test.txt");    //待复制的文件
    if(url.isValid()){
        copyfile.push_back(url);
    }else{
        return;
    }
    QMimeData *data=new QMimeData;
    data->setUrls(copyfile);

    QClipboard *clip=QApplication::clipboard();
    clip->setMimeData(data);

    //delete data;


回复

使用道具 举报

累计签到:93 天
连续签到:1 天
2022-9-16 10:52:48 显示全部楼层
插个眼,我刚学qt也不太懂这个,等后面回头在看看这个
回复

使用道具 举报

累计签到:1100 天
连续签到:1 天
2022-9-22 22:19:03 显示全部楼层
不需要用户手动释放,Qt 会自己管理对象的声明周期
回复

使用道具 举报

累计签到:5 天
连续签到:2 天
2022-10-9 14:26:18 显示全部楼层
这个看你代码是怎么写的,QT是有对象树机制,但是看你的代码:
QMimeData *data=new QMimeData;
data->setUrls(copyfile);

这里创建的data并没有放到任一对象树中,所以你还是需要把data进行手动内存释放。
回复

使用道具 举报

尚未签到

2022-10-21 13:46:17 显示全部楼层
不需要你去delete释放。因为QClipboard::setMimeData本身就会发生所有权转移。你new出来的mimedata由clipboard管理了。你可以显式调用clipboard的clear函数清除。
void QClipboard::setMimeData(QMimeData *src, QClipboard::Mode mode = Clipboard)
Sets the clipboard data to src. Ownership of the data is transferred to the clipboard. If you want to remove the data either call clear() or call setMimeData() again with new data.
The mode argument is used to control which part of the system clipboard is used. If mode is QClipboard::Clipboard, the data is stored in the global clipboard. If mode is QClipboard::Selection, the data is stored in the global mouse selection. If mode is QClipboard::FindBuffer, the data is stored in the search string buffer.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了