环境: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; }