QMessageBox::question导致视频窗口闪动
时间: 2023-07-02 16:14:56 浏览: 112
窗口屏幕闪动
5星 · 资源好评率100%
`QMessageBox::question`导致视频窗口闪烁的原因可能是因为`QMessageBox`会抢占其他窗口的焦点,导致视频窗口失去焦点并刷新。以下是一些可能的解决方法:
1. 将`QMessageBox`设置为非模态对话框,这样它就不会抢占焦点,并且视频窗口不会闪烁。
```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`设置为模态对话框,并将其父窗口设置为视频窗口,这样`QMessageBox`将不会抢占焦点,并且视频窗口不会闪烁。
```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`导致视频窗口闪烁的方法,你可以根据具体情况选择适合自己的解决方案。
阅读全文