c++ - Qt Window 标志设置为 Qt::WindowStaysOnTopHint 但不工作
问题描述
我创建了一个“flash”窗口以在应用程序启动期间显示图像。显示图像,在派生的 QMainWindow 构造函数中设置标志:
setWindowFlags(Qt::CustomizeWindowHint
| Qt::FramelessWindowHint
| Qt::WindowStaysOnTopHint);
但是,当创建另一个窗口时,我可以将这个新窗口拖到我不想要的启动窗口前面。我希望拖动的窗口位于启动窗口的后面,直到它被删除。
我在网上搜索,我设置的应该可以工作,但它没有。我正在使用基于 Qt 5.12.2 的 Qt Creator 4.9.0
我的系统是 iMAC(Retina 5K,27 英寸,2015 年末)。
[编辑] 我使用下面的代码来测试并证明我遇到的错误,我的应用程序窗口需要是模态的,但我希望启动窗口始终位于顶部。
#include <QMainWindow>
#include <QApplication>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QMainWindow * mw = new QMainWindow();
mw->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
mw->resize(500, 500);
mw->show();
QMainWindow * secondWindow = new QMainWindow();
secondWindow->setWindowModality(Qt::ApplicationModal); // <- This breaks the always on top flag
secondWindow->resize(500, 500);
secondWindow->show();
return app.exec();
}
我尝试将两个窗口都设置为模态,但这也无济于事。
解决方案
以下程序对我有用;对你起作用吗?(在我的 Mac 上,运行此程序会打开一个始终位于所有其他窗口前面的空灰色窗口)
#include <QMainWindow>
#include <QApplication>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QMainWindow * mw = new QMainWindow;
mw->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
mw->resize(500, 500);
mw->show();
QMainWindow * secondWindow = new QMainWindow;
secondWindow->resize(500, 500);
secondWindow->show();
return app.exec();
}
如果这个程序对你有用,那么你需要弄清楚你自己的程序与这个程序有何不同;OTOH,如果此程序显示与您在自己的程序中看到的相同的错误行为,那么您使用的 Qt 版本可能存在错误。(我在运行 OS/X 10.14.4、FWIW 的 2018 Mac mini 上使用 Qt 5.12.2 进行测试)
推荐阅读
- r - 在 4 个时间点为数据集准备数据和结构学习的动态贝叶斯网络
- python - 为什么我的深度学习模型会给出这个 ValueError?
- angular - Angular Primeng 如何使用 i18n 内置
- javascript - 如何使用 amcharts 在一个容器中创建多个线图
- c# - LinqToExcel 文件读取后删除 IOException
- django - 无法远程访问 django 服务器
- javascript - 使用 javascript 删除样式标签
- java - 处理 LazyInitializationException 的最佳方法是什么
- rabbitmq - Keda - RabbitMQ - 队列中的消息“就绪”时未触发缩放作业
- r - 棒棒糖图,镜像在 R 中的两个轴上