setMouseTracking(true)无法跟踪鼠标事件
然而还有点小问题(窗口复杂的时候,有父类有子类控件的时候)
解决方法是:
bool tabHomeWnd::eventFilter(QObject *watched, QEvent *event)
{
if(event->type() == QEvent::MouseMove) //这里是拖动窗口(就是按下左键再移动窗口)
{
mSecCurrent = mSecReauth;
qDebug() << "11111111111111111111111111111111111111111111111111111";
}
//这里是鼠标在窗口移动
if(event->type() == QEvent::HoverEnter || event->type() == QEvent::HoverLeave ||
event->type() == QEvent::HoverMove)
{
mSecCurrent = mSecReauth;
qDebug() << "2222222221111111111111222222222211111111111111122222222211111";
}
if(event->type() == QEvent::MouseButtonPress)
{
QMouseEvent* ev = static_cast<QMouseEvent*>(event);
if(ev->button() == Qt::LeftButton)
{
if(watched == ui->widget_set)
{
if (mMainWnd)
{
ui->setWidget->setEnterState();
ui->tabWidget->hide();
ui->setWidget->show();
}
return true;
}
if(watched == ui->widget_min)
{
if (mMainWnd)
{
((mainStackedWnd*)mMainWnd)->setWindowState(Qt::WindowMinimized);
}
return true;
}
if(watched == ui->widget_close)
{
exit(0);
return true;
}
}
}
return QWidget::eventFilter(watched, event);
}
//在构造函数里,要写两个东西,一个是setAttribute,一个是installEventFilter
this->setAttribute(Qt::WA_Hover, true);
ui->widgetTopbar->installEventFilter(this); //这两个都是父类的要设置这两个,就是最底层的控件
ui->widgetTopbar->setAttribute(Qt::WA_Hover, true);
ui->widgetMeetingPage->installEventFilter(this);
ui->widgetMeetingPage->setAttribute(Qt::WA_Hover, true);