假設一個的QMainWindow實例主窗口有兩個QTableView中實例作爲childeren:
ui->tableView1
和ui->tableView2
如果功能尚未宣佈,添加以下mainwindow.h:
protected:
bool eventFilter(QObject *target, QEvent *event);
添加遵循執行文件中的構造函數
ui->tableView1->viewport()->installEventFilter(this);
ui->tableView2->viewport()->installEventFilter(this);
添加以下功能在實現文件mainwindow.cpp
(如果該功能已經存在,如果塊添加額外的)
bool MainWindow::eventFilter(QObject * target, QEvent *event)
{
if (event->type() == QEvent::Drop) {
QDropEvent *dropEvent = (QDropEvent*) event;
// pointer target is the target and
// pointer dropEvent->source() is the source
if (target == ui->tableView1->viewport()) {
// ....
}
if (target == ui->tableView2->viewport()) {
// ...
}
}
return false; //leave further processing to widget
}
您也可以攔截QDragMoveEvent
。通過分析指針target
和event->source()
,您可以找出它的來源及其來源。
如果您將該信息編碼到啞劇數據中,並在放下該項目時將其解碼,該怎麼辦? – vahancho
這將需要始發窗口的系統範圍唯一標識符。有這樣的事嗎? – user377486
我會認爲更簡單 - 只需發明您的標識符並將它們作爲字節數組或類似的方式寫入MIME數據。 – vahancho