我試圖在我的Qt5應用程序中創建一個按鈕,該按鈕可以在應用程序之外拖動,並在刪除時將文件複製到該位置。在Qt5應用程序之外拖放一個文件
以Google Chrome瀏覽器爲例。下載文件時,可將其從窗口底部出現的列表拖到任何其他位置,如目錄。
是否有任何專門的部件來完成這項任務,或者我必須自己寫一個?如果是這樣,怎麼樣?我是一名有能力的C++程序員,但對Qt框架沒有多少經驗。
我試圖在我的Qt5應用程序中創建一個按鈕,該按鈕可以在應用程序之外拖動,並在刪除時將文件複製到該位置。在Qt5應用程序之外拖放一個文件
以Google Chrome瀏覽器爲例。下載文件時,可將其從窗口底部出現的列表拖到任何其他位置,如目錄。
是否有任何專門的部件來完成這項任務,或者我必須自己寫一個?如果是這樣,怎麼樣?我是一名有能力的C++程序員,但對Qt框架沒有多少經驗。
在dragwidget.cpp文件,如果你看一個功能mousePressEvent, 你可以看到QDrag需要mimeData
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
Mimedata定義QDrag的行爲,就像如果你拖動圖片,文件或文本或任何其他。
如果你想告訴您在拖有文件窗口,您需要在您的mimedata的東西,如添加一個網址:
mimeData->setUrls(QList<QUrl>() << QUrl::fromLocalFile("D:/test.txt"));
在draggabletext例如,mimedata包含文本,你可以看到在[158:161]行。
但是,如果你替換現有的:
mimeData->setText(child->text());
mimeData->setData(hotSpotMimeDataKey(),
QByteArray::number(hotSpot.x()) + ' ' +
QByteArray::number(hotSpot.y()));
通過
mimeData->setUrls(QList<QUrl>() << QUrl::fromLocalFile("D:/test.txt"));
當您將在Windows資源管理器的文本時,Windows會接受它,複製,你拖放文件。
什麼是孩子?什麼是hotSpotMimeDayaKey?這不是很清楚,朋友。 – Farahmand
我編輯了我的評論,併爲我可憐的英語感到抱歉 –
如果有關係,這是一個zip存檔文件,我試圖在程序之外使其可拖動。 – Farahmand