QT c++可以使用自定义mime类型在多个应用程序上复制和粘贴
QT C++ Can I use Custom mime-type for copy and paste on multiple application?
最近,我做了一些应用程序,使用自定义mime类型进行复制和粘贴。
我使用vs2015与Qt 5.7.0。
在单个应用程序中,复制粘贴效果很好,
但是当我执行A.exe和A'.exe(由相同代码构建的相同应用程序)时,
custom - time -type和qclipboard在A'.exe和A'.exe之间不能正常工作
否则,每个应用程序的功能都可以正常工作。
当我复制A.exe上的数据并将其粘贴到A'.exe时,自定义Mimedata为NULL。
在不使用QbyteArray的情况下,有没有办法解决这个问题?下面是我的函数。
复制:
QClipboard* _clipboard = QApplication::clipboard();
mycustomMimedata* _Mimedata = new mycustomMimedata();
_clipboard->setMimeData(_Mimedata);
粘贴:
QClipboard* _clipboard = QApplication::clipboard();
const mycustomMimedata* _mimeData =
qobject_cast<const mycustomMimedata*>(_clipboard->mimeData());
您分配的内存由创建它的进程拥有。其他进程不能访问它。这里有两个不同的进程
当你分配mycustomMimedata
并将其存储在mime数据中时,你实际上是在mime数据中存储一个指针。这可能有地址5(只是一个随机数)在您的应用程序A.exe。
现在另一个应用程序有他自己的内存,在地址5什么也没有,或者可能有别的东西。所以当你"粘贴"时,你说"从内存地址5给我一些东西",Qt似乎足够聪明,知道这是无效的,并给你一个空指针。
可能的解决方案:
如果你只需要一个"拷贝",你可以使这个类序列化,并将这个数据设置为MIME值,并在粘贴操作时反序列化它。或者,如果您从数据库中加载它,则使用该ID在其他应用程序中重新加载该对象。
如果使用非pod类型,将数据复制到QByteArray中可能会很危险。如果是POD,应该保存
如果需要在两个应用程序中操作同一个实例,则需要进入IPC和shared_memory。幸运的是Qt也实现了这些功能。这个回答可能太宽泛了,但是Qt有很好的文档和例子:http://doc.qt.io/qt-5/qtcore-ipc-sharedmemory-example.html
- C++应用程序通知 C# 应用程序
- 更改 C++ 应用程序的应用程序窗口图标
- 在Linux中寻找正确的方式,将C 应用程序从C 应用程序编写加密文本到加密的GPG文件
- 使用 gstreamer 的应用程序和应用程序修改视频
- 无法从对话框中关闭应用程序(Qt 应用程序)
- 如何从Windows上的Windows API上的另一个应用程序获得应用程序宽度和高度
- 我可以在 iOS 中将 Swift 应用程序与 C++ 应用程序 (Vuforia) 合并吗?
- 64位Windows上应用程序的最大可用内存是多少
- windows中java应用程序和C++应用程序之间的同步
- 如何在不冻结应用程序 1 的情况下从另一个应用程序 1 执行应用程序 2
- Java应用程序与C++应用程序之间的通信
- 如何使用'C'或'C++'为窗口创建独立的程序或应用程序
- 没有找到为windows应用程序设置应用程序图标的问题.rc文件
- 如何使用VSCode调试C++应用程序控制台应用程序
- 在Windows 8.1上应用程序模糊
- 哪里为OSX 10.6上C++应用程序的默认构建定义了__LP64__
- Java 应用程序和C++应用程序集成/通信
- 如何使用程序关闭应用程序
- Web 应用程序 - Web 应用程序和 C++
- 32位Windows上c++应用程序可用的最大内存是多少?