qt窗口置顶问题求助。

hf1414 2018-03-08 11:34:32
qt自带的例子:2dpainting,将其main.cpp改成下面的样子:
#include "window.h"

#include <QApplication>
#include <QSurfaceFormat>

#include <QDialog>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QSurfaceFormat fmt;
fmt.setSamples(4);
QSurfaceFormat::setDefaultFormat(fmt);

Window window;
window.setWindowFlags(Qt::FramelessWindowHint);
window.resize(1920,1080);
window.move(0,0);
window.show();
QDialog d;
d.setWindowFlags(
Qt::Dialog
| Qt::WindowTitleHint
| Qt::CustomizeWindowHint
| Qt::WindowStaysOnTopHint
);
d.show();

return app.exec();
}

执行后对话框正常置顶,但点击主窗口任意位置,对话框就会被主窗口遮挡,希望对话框能始终置顶,不知道该怎么做,请高手指点,谢谢了。
...全文
1723 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
萧洛 2018-03-19
  • 打赏
  • 举报
回复
去掉 | Qt::WindowStaysOnTopHint 这一句
hf1414 2018-03-18
  • 打赏
  • 举报
回复
引用 9 楼 qq214517703 的回复:
QWdiget* window=new QWdiget; QDialog *dialog = new QDialog(window); dialog->setWindowFlags(Qt::Tool); dialog->setAttribute(Qt::WA_Moved); dialog->show(); 这样就能让dialog永远在window的上面了
正常的使用QWidget作为父窗体让对话框置顶是没有问题的,关键是在2dpainting这个例子中,父窗体里面嵌入了一个QOpenGLWidget,嵌入这个之后,只要QOpenGLWidget一刷新对话框就不能正常置顶了。
雲天之巔 2018-03-13
  • 打赏
  • 举报
回复
QWdiget* window=new QWdiget; QDialog *dialog = new QDialog(window); dialog->setWindowFlags(Qt::Tool); dialog->setAttribute(Qt::WA_Moved); dialog->show(); 这样就能让dialog永远在window的上面了
jklinux 2018-03-10
  • 打赏
  • 举报
回复
试下让对话窗口: setWindowModality(Qt::ApplicationModal);
hf1414 2018-03-10
  • 打赏
  • 举报
回复
引用 2 楼 YIZI_LinRL 的回复:
QDialog d;后面加一句 d.setParent(window);
加了好像也不行。。。
hf1414 2018-03-10
  • 打赏
  • 举报
回复
引用 1 楼 usecf 的回复:
将window.setWindowFlags(Qt::FramelessWindowHint);改成setWindowFlags(Qt::WindowModal);试试
error: C2664: “void QWidget::setWindowFlags(Qt::WindowFlags)”: 无法将参数 1 从“Qt::WindowModality”转换为“Qt::WindowFlags” 似乎是不行。
hf1414 2018-03-10
  • 打赏
  • 举报
回复
引用 3 楼 jklinux 的回复:
d.show();改成d.exec()应可以了
我不想让d变成模式对话框,这样的话window窗口就没办法响应其他输入了。。
hf1414 2018-03-10
  • 打赏
  • 举报
回复
引用 7 楼 jklinux 的回复:
试下让对话窗口: setWindowModality(Qt::ApplicationModal);
还是变成模式对话框了。
jklinux 2018-03-09
  • 打赏
  • 举报
回复
d.show();改成d.exec()应可以了
_LinGM 2018-03-09
  • 打赏
  • 举报
回复
QDialog d;后面加一句 d.setParent(window);
usecf 2018-03-09
  • 打赏
  • 举报
回复
将window.setWindowFlags(Qt::FramelessWindowHint);改成setWindowFlags(Qt::WindowModal);试试

16,201

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧