[英]How to set the mime-type of a new created file to application/json? C++
[英]QT C++ Can I use Custom mime-type for copy and paste on multiple application?
最近,我做了一個使用自定義mime-type復制和粘貼的應用程序。
我在Qt 5.7.0中使用vs2015。
在單個應用程序中,復制和粘貼效果很好,
但是當我執行A.exe和A'.exe(由相同代碼構建的同一應用程序)時,
自定義的MIME類型和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());
您分配的內存由創建它的進程擁有。 其他進程無法訪問它。 您在這里有2個不同的過程。
當分配mycustomMimedata
並將其存儲在mime數據中時,實際上是在mime數據中存儲了一個指針。 您的應用程序A.exe中的地址可能為5(只是一個隨機數)。
現在,另一個應用程序擁有自己的內存,並且在地址5處什么也沒有,也許還有其他東西。 因此,當您“粘貼”時,您說“從內存地址5給我一些東西”,Qt似乎很聰明,知道這是無效的,並且為您提供了空指針。
可能的解決方案:
如果只需要“復制”,則可以使該類可序列化,並將此數據設置為MIME值,然后在粘貼操作中反序列化。 或者,如果您從數據庫中加載它,請使用該ID在其他應用程序中重新加載該對象。
如果您具有非POD類型,則將數據復制到QByteArray可能很危險。 如果是POD,則應保存。
如果需要在兩個應用程序中操作同一實例,則需要進入IPC和shared_memory。 幸運的是,Qt還實現了這些功能。 盡管對於此答案,這可能會變得太寬泛,但是Qt具有良好的文檔和示例: http : //doc.qt.io/qt-5/qtcore-ipc-sharedmemory-example.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.