簡體   English   中英

QT C ++我可以使用Custom mime-type在多個應用程序上進行復制和粘貼嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM