Qt控件拖拽Dropevent失效解决办法
环境说明
Qt版本:5.12 Mingw32
操作系统:win10
Qt控件拖拽Dropevent失效原因
个人觉得这完全就是Qt中现存的BUG,经过测试可以明显的发现,dragEnterEvent和dragLeaveEvent是与dropEvent联合起来实现拖拽的功能的,但有部分的控件可以触发dragEnterEvent和dragLeaveEvent,却无论如何也无法触发dropEvent这是很不合常理的。
举个例子
通过treeview向QChartView中拖拽信息,其中QChartView就属于无法触发dropEvent的典型案例。如何实现QChartView触发dropEvent,直接上代码:
//初始化过程中加入
ui->widget->viewport()->installEventFilter(this);
ui->widget_2->viewport()->installEventFilter(this);
//后面添加需要的dropEvent
bool Widget::eventFilter(QObject *obj, QEvent *e)
{
if (obj == ui->widget->viewport())
{
if(e->type()==QEvent::Drop)
{
updateTableandChart();
}
}
if (obj == ui->widget_2->viewport())
{
if(e->type()==QEvent::Drop)
{
updateTableandChart();
}
}
return QWidget::eventFilter(obj,e);
}
这样就可以是的QChartView触发dropEvent了,这样便可以将需要拖拽的信息在QChart中显示出来。