我想保持一些數組數據與QTableWidget的內容同步。我希望啓用拖放重新排序(在表格中移動項目,而不是複製),但是我不清楚在觸發放置事件時如何觸發項目拖動FROM的索引。因此,我無法知道要在與之同步的列表中移動哪個對象。我如何獲得被拖動項目的原始行索引?當在QTableWidget中拖動一行時,如何找出它被拖拽FROM和TO的行索引?
2
A
回答
3
對來自QMimeData中的索引進行編碼,並使用setMimeData()將其存儲在QDrag對象中。發生拖放事件時,使用mimeData()從QDropEvent提取數據。
0
QDropEvent
有一個source()
函數,它會爲您提供啓動拖放事件的小部件。然後在source
上執行qobject_cast<QTableWidget>
。驗證指針後,請致電QTableWidget::findItems
以獲取該項目的行。
因此,像這樣:
void dropEvent (QDropEvent * event) {
if (event) {
QTableWidget* table = qobject_cast<QTableWidget*>(event->source());
if (table) {
QString item = ""// Decode MIME data here.
Qt::MatchFlag someFlag = Qt::MatchExactly; // Check documentation for match type.
QList<QTableWidgetItem *> items = table->findItems(item, someFlag)
// If you don't have repeats, items[0] is what you want.
int initialRow = table->row(items[0]);
}
}
}
我傾向於使用模型/視圖類,所以這可能是一個有點過,但它應該工作。
1
第1步。重寫QTableWidget :: mimeData函數。調用基類實現,然後將自己的自定義MIME類型填充到QMimeData中,然後將其返回。
第2步。覆蓋QTableWidget :: dropEvent函數。如果您的MIME數據在QMimeData中,請接受下拉並提取您的數據。使用QTableWidget :: indexAt來查找放入的行/列。
相關問題
- 1. 可拖拽的元素在拖拽的頁面中拖動
- 2. iPhone UITableView行拖拽移動
- 3. 當被拖拽時,JPanel子類「跳轉」
- 4. jQuery可拖拽+可拖拽 - 物理移動拖拽項目到被拖拽的容器
- 5. 可拖動的跨度被拖拽後不可拖動
- 6. jquery ui可拖拽/可拖拽,掉落時可交換拖拽
- 7. 可可:如何在拖拽時變形拖拽圖像
- 8. Drag Drag拖拽時添加拖拽
- 9. iOS上的JQ UI可拖拽:啓動拖拽處理程序中的拖拽
- 10. 如何在當前行中拖動拖動開始和拖動結束之間的所有單元格,拖動只能在當前行中拖動
- 11. jQuery可拖拽/可拖拽
- 12. 可拖拽的位置在可拖拽
- 13. 如何拖拽X和Y?
- 14. QDrag在拖拽時被破壞
- 15. 如何使用jQuery進行拖拽
- 16. 當手指正在被它拖動時,改變UIButton的大小/當它被拖動時
- 17. jQuery UI的拖拽,拖拽父DIV
- 18. Jquery被拖拽時顯示的qtip
- 19. 當第一行被拖拽時,jQuery-UI可排序表調整列大小列
- 20. Jquery可拖拽和droppable,切換到originalPosition另一個可拖拽
- 21. Yii CGridView - 拖拽和選擇行
- 22. jQuery動態拖拽
- 23. 我該如何限制一組可拖拽到一個droppable,另一組可拖拽到第二個可拖拽
- 24. 如何檢測哪個div被拖拽
- 25. 如何通過拖動一個UIImageView的UITableView的行索引
- 26. 如何在NSTableView中拖動一行?
- 27. 如果正確的話,jQuery可拖拽和可拖動計數
- 28. 在android中拖拽n拖放textview
- 29. 在一個頁面上的兩個可拖拽和兩個可拖拽
- 30. ng-sortable on Table。當我拖動一行時,CSS被丟棄