环境:win10 64 位 VS2013+QT5.10.1
bool MyMain::eventFilter(QObject *watched, QEvent *event)
{
if (watched == ui.ShowLabel)//当事件发生在(为Qlabel型)控件上
{
if (event->type() == QEvent::KeyPress)
{
//ESC退出全屏
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Escape && ui.ShowLabel->isFullScreen())
{
//退出全屏
ui.ShowLabel->setWindowFlags(Qt::SubWindow);
ui.ShowLabel->showNormal();
ui.ShowLabel->setGeometry(10, 10, 352, 288);
}
}
else if (event->type() == QEvent::MouseButtonPress)
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::LeftButton)
{
if (!ui.ShowLabel->isFullScreen())
{
//全屏显示
ui.ShowLabel->setWindowFlags(Qt::Window);
ui.ShowLabel->showFullScreen();
}
else
{
//退出全屏
ui.ShowLabel->setWindowFlags(Qt::SubWindow);
ui.ShowLabel->showNormal();
ui.ShowLabel->setGeometry(10, 10, 352, 288);
}
}
else if (mouseEvent->button() == Qt::RightButton)
{
//右键菜单
QIcon icon("./res/ScreenShot.jpg");
QMenu *pMenu = new QMenu(this);
pMenu->addAction(icon, QStringLiteral("截图"), this, &CYuvPlayer::ScreenShot);
//connect(pMenu, &QMenu::triggered, this, &MyMain::ScreenShot);这种方法和上一行代码作用相同
pMenu->move(cursor().pos());
pMenu->show();
}
}
return QObject::eventFilter(watched, event);
}
return false;
}