Qt 在全屏时弹窗、菜单和提示框不显示的问题

这个是Qt5的bug,参考链接 https://doc.qt.io/qt-5/windows-issues.html

简单翻译就是,基于OpenGL的全屏窗口无法与上层窗口正确合成,给这个全屏窗口下移一个像素就行了。这里有个讨论串 https://bbs.csdn.net/topics/392484482,其中有个方案就是直接移动窗口的。

文章中说调用这句就行

	QWindowsWindowFunctions::setHasBorderInFullScreen(tlwWindow->windowHandle(), true);

关于这个函数调用,有一些注意的点,不过都可以在Qt的文档中找到就是了。

  • 包含头文件 #include <QtPlatformHeaders/QWindowsWindowFunctions>
  • windowHandle 是需要先调用 winId() 产生一个native窗口才能正确调用的。
  • tlwWindow 指的是目标的全屏窗口。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 您可以使用QMessageBox类来创建一个弹窗提示,当您尝试关闭Qt的exe程序,可以在关闭进程之前弹出提示。您可以使用以下代码: QMessageBox::StandardButton reply; reply = QMessageBox::question(this, "提示", "您确定要关闭程序吗?", QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) { //关闭进程 } else { //取消关闭 } 这将创建一个带有“是”和“否”按钮的弹窗提示,询问用户是否要关闭程序。如果用户选择“是”,则关闭进程,否则取消关闭。 ### 回答2: 在Qt中,可以使用QMessageBox类来显示弹窗提示并阻止关闭进程。 首先,需要在Qt项目中包含QMessageBox头文件: ```cpp #include <QMessageBox> ``` 然后,在关闭事件(closeEvent)中处理进程关闭的逻辑。在主窗口的关闭事件中,可以通过重写closeEvent函数来捕获关闭事件: ```cpp void MainWindow::closeEvent(QCloseEvent *event) { // 阻止直接关闭进程 event->ignore(); // 显示弹窗提示 QMessageBox msgBox; msgBox.setText(tr("关闭确认")); msgBox.setInformativeText(tr("确定要关闭程序吗?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); // 检查用户的选择,如果点击了确认则关闭进程 if (msgBox.exec() == QMessageBox::Yes) { event->accept(); } } ``` 在以上代码中,closeEvent函数重写了MainWindow类的关闭事件,在关闭事件发生,会阻止直接关闭进程并显示一个带有选择按钮的对话框。根据用户的选择,确定是否关闭进程。 这样,在关闭进程,会弹出提示框,询问用户是否确定关闭程序。只有当用户确认关闭,进程才会关闭。否则,进程将继续运行在后台。 ### 回答3: 在Qt的exe程序中,在关闭进程弹窗提示阻止的方法如下: 1. 首先,在关闭事件中捕捉关闭信号。在主窗口类中,重新实现`closeEvent`方法,并在其中捕捉关闭事件。 2. 创建一个`QMessageBox`对话框,提示用户是否真的要关闭程序。 3. 给`QMessageBox`对话框添加两个按钮,分别用于确认关闭和取消关闭。 4. 若用户选择取消关闭,则调用`event->ignore()`来忽略关闭事件,阻止程序关闭。 5. 若用户选择确认关闭,则调用`event->accept()`来接受关闭事件,允许程序关闭。 下面是一个示例代码: ```cpp #include <QMainWindow> #include <QCloseEvent> #include <QMessageBox> class MyMainWindow : public QMainWindow { Q_OBJECT public: MyMainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { // ... } protected: void closeEvent(QCloseEvent *event) override { // 弹窗提示是否关闭程序 QMessageBox::StandardButton reply; reply = QMessageBox::question(this, "关闭程序", "确定要关闭程序吗?", QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) { // 用户选择确认关闭 event->accept(); } else { // 用户选择取消关闭 event->ignore(); } } }; ``` 通过以上方法,在关闭Qt的exe程序,会弹出一个对话框询问用户是否真的要关闭程序。只有用户选择确认关闭,程序才会关闭,否则会被阻止关闭。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值