2009-11-13 85 views
0

我在拖動&下降時遇到了很大的麻煩。我創建了一個新的Qt設計器表單類,其中我有一個QListWidget和一個QWidget。現在我想在這兩個小部件之間拖放&。使用.ui文件拖放

問題是,我可以在哪裏添加dragEnterEven(...),dragMoveEvent(...)等功能?我只有這些class.h,class.cpp和class.ui文件。

任何幫助非常感謝!

-Samuli

回答

3

首先,如果你沒有看過Qt的Drag and Drop文檔,你真的想從那裏開始。我要告訴你的是對那裏有什麼的總結。一旦你閱讀過程描述,你也一定要看看drag and drop examples

其次,如果我誤解了這一點,我很抱歉,你的問題聽起來像你對C++不太熟悉。您想要聲明.h文件中的方法,並在.cpp文件中定義它們。您可以使用Designer來完成某些事件聲明,但您需要在.cpp中定義這些事件的實現。如果還不清楚,你需要先閱讀更多關於基本C++的知識。

如果你確定這些基本知識,這裏的拖放是如何工作的一個簡短的總結:

  • 創建QDrag

    • 拖動所做。您想在觸發拖動的情況下這樣做,即在任何情況下我都可以想到鼠標點擊(mousePressEventmouseMoveEvent - 哪一個取決於您想要查看的確切行爲)。
    • 編碼您想要拖動的數據。您可以使用MIME編碼來完成此操作,這是標記正在拖動的文檔類型的標準方法。 (例子包括文本,圖像和大多數其他媒體格式)。假設文本爲簡單情況。
      • 創建用於適當類型QMimeData
      • 設定數據(例如,用於文本使用QMimeData::setText)\
      • 的mime數據添加到所述拖動對象與QDrag::setMimeData
      • 請在您的拖動對象上撥打QDrag::exec
        • 啓用使用QWidget::setAcceptDrops(true)給定插件的acceptDrops屬性:
    • 滴被完成。
    • 在您的小部件上定義dropEvent以處理丟棄。您使用setMimeData在拖動中設置的數據可用作放置事件QDropEvent::mimeData的方法。您需要使用適當的文檔類型從中提取數據(例如text())。

這顯然是不完整的,但拖放有足夠的步驟,你真的應該詳細閱讀一次約他們,看一些例子。本摘要旨在讓您瞭解您需要做什麼。

0

最簡單的方法是繼承想要在其間拖放的QListWidgetQWidget,並處理這些實現中的事件。如果你這樣做,你應該能夠右鍵單擊設計器,並在主要的.ui文件中推廣這些小部件。

如果您不想繼承子類,則可以查看事件篩選器,並在每個小部件上安裝事件篩選器。事件過濾器可以處理導致調用dragEnterEvent()dragMoveEvent()的事件。這可能會讓任何人稍後看到你的代碼更令人困惑。

我也是第二個quark's suggestion細讀的例子。你可以通過一個工作示例學習很多東西,並嘗試修改它來做一些稍微不同的事情。