QMessageBox::question 调用的时候视频播放窗口会闪动
时间: 2023-07-27 18:16:20 浏览: 96
Qt个人学习笔记整理
5星 · 资源好评率100%
`QMessageBox::question`导致视频播放窗口闪动的原因可能是因为`QMessageBox::question`是一个模态对话框,它会抢占其他窗口的焦点,导致视频播放窗口失去焦点并刷新。以下是一些可能的解决方法:
1. 将`QMessageBox::question`设置为非模态对话框,这样它就不会抢占焦点,并且视频播放窗口不会闪动。
```cpp
QMessageBox msgBox;
msgBox.setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
msgBox.setModal(false);
msgBox.setText("Are you sure you want to quit?");
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
msgBox.show();
```
2. 将`QMessageBox::question`设置为模态对话框,并将其父窗口设置为视频播放窗口,这样`QMessageBox::question`将不会抢占焦点,并且视频播放窗口不会闪动。
```cpp
QMessageBox msgBox;
msgBox.setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
msgBox.setText("Are you sure you want to quit?");
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
msgBox.setParent(videoWidget);
msgBox.setModal(true);
msgBox.show();
```
3. 使用`QDialog`代替`QMessageBox`,并将其设置为模态对话框,以便它不会抢占焦点。
```cpp
QDialog dialog(videoWidget);
dialog.setModal(true);
dialog.setWindowTitle("Question");
QLabel label("Are you sure you want to quit?");
QVBoxLayout layout(&dialog);
layout.addWidget(&label);
QDialogButtonBox buttonBox(QDialogButtonBox::Yes | QDialogButtonBox::No,
Qt::Horizontal, &dialog);
layout.addWidget(&buttonBox);
QObject::connect(&buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
QObject::connect(&buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
dialog.show();
```
以上是几种可能解决`QMessageBox::question`导致视频播放窗口闪动的方法,你可以根据具体情况选择适合自己的解决方案。
阅读全文