2009-11-21 49 views

回答

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來查找放入的行/列。

相關問題