2017-10-12 51 views
0

我試圖在我的Qt5應用程序中創建一個按鈕,該按鈕可以在應用程序之外拖動,並在刪除時將文件複製到該位置。在Qt5應用程序之外拖放一個文件

以Google Chrome瀏覽器爲例。下載文件時,可將其從窗口底部出現的列表拖到任何其他位置,如目錄。

是否有任何專門的部件來完成這項任務,或者我必須自己寫一個?如果是這樣,怎麼樣?我是一名有能力的C++程序員,但對Qt框架沒有多少經驗。

+0

如果有關係,這是一個zip存檔文件,我試圖在程序之外使其可拖動。 – Farahmand

回答

2

你試過Draggable Text Example

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會接受它,複製,你拖放文件。

+0

什麼是孩子?什麼是hotSpotMimeDayaKey?這不是很清楚,朋友。 – Farahmand

+0

我編輯了我的評論,併爲我可憐的英語感到抱歉 –

相關問題