假设一个 QMainWindow 实例 MainWindow 有两个 QTableView 实例作为子项:
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 中添加以下函数
(如果该函数已经存在,则添加额外的 if 块)
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()
您可以找出它的去向和来源。