Qt保持窗口在最上方
原文:https://blog.csdn.net/hl1hl/article/details/85244451
前言
在Qt开发桌面软件的过程中,根据开发的需求不同,我们经常需要将弹出窗口,一般常见的是需要是以下两种。
锁定弹出的窗口,阻塞其他窗口(包括主窗口)的操作,只有关闭当前窗口才能点击其他窗口或者主窗口
保持当前窗口一直显示在最顶层,但是不锁定(即同时可以操作其他窗口),同时也需要保证不影响其他程序
知识准备
首先我们需要了解一下 QMainWindow、QWidget、QDialog 的区别。
具体可以看以下链接,我只说下结论。
如果需要嵌入至其他窗体中,则基于 QWidget 创建;
如果是顶级对话框,则基于 QDialog 创建;
- QDialog 又分为非模态对话框、模态对话框、半模态对话框
如果是主窗体,则基于 QMainWindow 创建
相信你看了上面的许多开发者就会知道自己的一个最基本的错误的:通过继承 QWidget 来创建弹出窗口,这个最基本的错误会导致你无法实现以上两点将窗口置顶以及其他不合理的Bug。
记住重要的一点,创建顶级(弹出)对话框,基于 QDialog 来创建。如果是弹出窗口基于 QWidget 来创建也没有关系,不需要重要修改太多,只需 setWindowflags(Qt::Dialog)。
具体操作
一、针对第一种锁定弹出窗口
1、如果窗口是基于QDialog创建。
topWindow.setParent(this);//指定父窗口,一般是目前将你弹出的窗口
topWindow.exec();//模态
2、如果窗口是基于QWidget创建(不建议这么做)
topWindow->setWindowFlags(topWindow->windowFlags() |Qt::Dialog);
topWindow->setWindowModality(Qt::ApplicationModal); //阻塞除当前窗体之外的所有的窗体
topWindow->show();
二、设置窗口一直保持在顶层,但是不阻塞用户操作其他窗口
1、如果窗口是基于QDialog创建的
topWindow=new TopWindow(this);//指定父窗口
topWindow.show();//非模态
2、如果窗口是基于QWidget创建的(不建议)
topWindow.setParent(this);//指定父窗口
topWindow.setWindowFlags(topWindow.windowflags()| Qt::Dialog);
topWindow.show();
以上 topWindow 是窗体类新建的对象。
其他的窗口置顶方式
其实有其他将窗口置顶的方式,但是是对于所有程序的窗口都置顶。也就是说其他程序打开后也在被置顶的窗口所遮盖。
我所知道的有两种方式:
topWindow->setWindowFlags(topWindow->windowFlags() | Qt::WindowStaysOnTopHint);
或者
SetWindowPos(HWND(topWindow->winid()),HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
Qt保持窗口在最上方的更多相关文章
- [转] - 使用Qt作窗口截屏(含源码)
截屏(screenshot),就是将屏幕上的东西拷贝下来存成图片文件.介绍的好像有点多余:(,那我们就直接切入正题. QPixmap提供了两个函数grabWidget和grabWindow可以将屏幕上 ...
- QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数
QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...
- C++框架_之Qt的窗口部件系统的详解-上
C++框架_之Qt的窗口部件系统的详解-上 第一部分概述 第一次建立helloworld程序时,曾看到Qt Creator提供的默认基类只有QMainWindow.QWidget和QDialog三种. ...
- 【Qt】窗口居中显示
w.move((a.desktop()->width() - w.width())/, (a.desktop()->height() - w.height())/); 上述方法可以置中,但 ...
- Qt的窗口的最大化。
1.window.showFullScreen()//此方法只对顶级窗口有效,对子窗口无效 QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗 ...
- QT 主窗口和子窗口相互切换示例
QT 主窗口和子窗口相互切换示例 文件列表: SubWidget.h #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QtWidgets/QW ...
- Qt子窗口QMidSubwindow全屏出现的问题总结
我的需求:想全屏一个子窗口QMidSubwindow,禁止显示最大化最小化和关闭按钮. 我开始尝试的是网上介绍的方法,把结果展现给大家一下,最后再总结: 方法1:QMidSubwindow直接调用sh ...
- Qt 子窗口监听主窗口信号
Qt 子窗口监听主窗口信号(转载) 原文链接:https://www.cnblogs.com/ybqjymy/p/12169762.html 1 MainWindow *ptr = NULL; 2 ...
- Qt多窗口编程详解
常用的窗体基类是 QWidget.QDialog 和 QMainWindow,在创建 GUI 应用程序时选择窗体基类就是从这 3 个类中选择. QWidget 直接继承于 QObject,是 QDia ...
随机推荐
- 如果我选择IT行业,会不会在几年,或者几年后被社会给淘汰??
IT互联网各行业薪资占比,你能拿到多少?随着移动互联网时代的发展,IT行业的需求量也越来越大,而且每年都会新增,当然也会有淘汰. 人生如此之短,都不喜欢自己虚度光阴,也不希望自己所努力的东西成为历史, ...
- ajax按楼层加载数据
代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...
- Python - 利用词云wordcloud,jieba和中国地图制作四大名著的热词图
热词图很酷炫,也非常适合热点事件,抓住重点,以图文结合的方式表现出来,很有冲击力.下面这段代码是制作热词图的,用到了以下技术: jieba,把文本分词 wordcloud,制作热图 chardet,辨 ...
- 详解 Properties类
(请观看本人博文--<详解 I/O流>) Properties类: 概念: Properties 类的对象 是 一个持久的属性集 Properties 可 保存在流中 或 从流中加载 属性 ...
- python中文资源大全
Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...
- Java 多线程 -- 线程安全 双重检测(double checking)
先看一个经典的12306案例: public class SynBlockTest { public static void main(String[] args) { // 一份资源 SynWeb1 ...
- SpringBoot Mybatis-Plus 整合 dynamic-datasource-spring-boot-starter 对数据库进行读写分离
准备工作 对 MySql 进行主从搭建 引入 dynamic-datasource-spring-boot-starter 坐标 引入 druid-spring-boot-starter 坐标 对应框 ...
- 第十二章Linux文件系统与日志
1.inode 包含文件的元信息(1)inode 内容:文件的字节数.拥有者的 UID.GID.文件的读写执行权限.时间戳等,但不包含文件名.文件名是储存在目录的目录项中.(2)查看文件的 inode ...
- NumPy学习指南(第2版)
第一章 NumPy快速入门 首先,我们将介绍如何在不同的操作系统中安装NumPy和相关软件,并给出使用NumPy的简单示例代码. 然后,我们将简单介绍IPython(一种交互式shell工具). 如前 ...
- Android Studio SVN配置忽略文件
1.用Android Studio创建一个项目,会在根目录和Module目录下自动生成.gitignore文件,貌似是Git的配置文件,和SVN没有关系. 2.打开Setting-Version Co ...