Qt学习笔记15:setWindowFlags和 setAttribute


1. setWindowFlags(QT::WindowFlags)

setWindowFlags(QT::WindowFlags)主要设置一些窗口标志,平常开发中主要有两类需求:

  • 将某一子窗口设置为最顶层窗口。
    使用Qt::Tool 属性:setWindowFlags(Qt::Tool)
  • 重新定义窗口的属性,比如:取掉最大、最小、关闭等按钮,或者直接使用无边框窗口

注意:很多人可能使用第2类设置属性,但是总是不成功,其原因是如果子窗口有父亲,则窗口属性也被父亲控制,这时候的这个子窗口其实并不是严格意义上的完整窗口,相当于父窗口的一个部件,所以这时候设置自定义窗口属性,有两种方法:(1)设置父亲窗口属性,(2)给子窗口设置属性的时候加上 Qt::Window 或 Qt::Dialog等指定该子窗口为完整窗口,(Qt::DIalog | Qt::CustomizeWindowHint )

以下是窗口具体属性介绍:

  • Qt::Widget : QWidget构造函数的默认值,如新的窗口部件没有父窗口部件,则它是一个独立的窗口,否则就是一个子窗口部件。
  • Qt::Window : 无论是否有父窗口部件,新窗口部件都是一个窗口,通常有一个窗口边框和一个标题栏。
  • Qt::Dialog : 新窗口部件是一个对话框,指示部件是应该作为对话框窗口(即标题栏中通常没有最大化或最小化按钮)。这是QDialog的默认类型。如果要将其用作模态对话框,则应从另一个窗口启动它,或者如果有父窗口,则与QWidget::windowModality属性一起使用。如果将其设置为模态,则对话框将阻止应用程序中的其他顶级窗口获取任何输入。我们将具有父级的顶级窗口称为辅助窗口。
  • Qt::Sheet : 新窗口部件是一个Macintosh表单。
  • Qt::Drawer : 新窗口部件是一个Macintosh抽屉。
  • Qt::Popup : 新窗口部件是一个弹出式顶层窗口。
  • Qt::Tool : 新窗口部件是一个工具窗口,它通常是一个用于显示工具按钮的小窗
    口,如果一个工具窗口有父窗口部件,则它将显示在父窗口部件的上面,否则,将相当于使用了Qt::WindowStaysOnTopHint展示。
  • Qt::Tooltip : 新窗口部件是一个提示窗口,没有标题栏和窗口边框.
  • Qt::SplashScreen : 新窗口部件是一个欢迎窗口,它是QSplashScreen构造函数的默认值。
  • Qt::Desktop : 新窗口部件是桌面,它是QDesktopWidget构造函数的默认值。
  • Qt::SubWindow : 新窗口部件是一个子窗口,而无论该窗口部件是否有父窗口部件。
  • Qt::X11BypassWindowManagerHint : 完全忽视窗口管理器,它的作用是产生一个根本不被管理器的无窗口边框的窗口,此时,用户无法使用键盘进行输入,除非手动调用QWidget::ActivateWindow()函数。
  • Qt::FramelessWindowHint : 产生一个无窗口边框的窗口,此时用户无法移动该窗口和改变它的大小。
  • Qt::CustomizeWindowHint : 关闭默认的窗口标题提示。
    this->setWindowModality(Qt::WindowModal); //设置窗体为模态

2. setAttribute(Qt::WA_DeleteOnClose,true)

setAttribute(Qt::WA_DeleteOnClose,true)用于设置各种窗口小部件(widget)的属性,平时开发一般两种需求:

  • 关闭窗口时删掉实例化的类
    使用Qt::WA_DeleteOnClose 属性:setAttribute(Qt::WA_DeleteOnClose,true)
  • QT中窗口部件背景透明化
    Qt::WA_NoSystemBackground, Qt::WA_TranslucentBackground:

注意:窗口透明还有很多方法,以下列举几个

  1. Qt::WA_DeleteOnClose
    一个QWidget在close()时,对象并没有被删除,可以设置this->setAttribute(Qt::WA_DeleteOnClose,true);使此对象被
    若下次再调用show()就会段错误。不过这种方法有个弊端:因为这个指针是没有办法自动设为NULL,会变为野指针。

  2. Qt::WA_QuitOnClose属性:表示当拥有该属性的最后一个部件接受到QCloseEvent事件时,让Qt终止应用程序。默认情况 下,所有Qt::Window类型的部件都具有该属性。

  3. Qt::WA_NoSystemBackground, Qt::WA_TranslucentBackground:
    setAutoFillBackground(false); //这个不设置的话就背景变黑
    setWindowFlags(Qt::FramelessWindowHint);
    setAttribute(Qt::WA_TranslucentBackground,true); 表示窗口小部件应具有半透明背景,即窗口小部件的任何非不透明区域将 是半透明的(因为窗口小部件将具有Alpha通道。)设置此标志会导致设置WA_NoSystemBackground。在Windows上,窗口 小部件还需要设置Qt :: FramelessWindowHint窗口标志。该标志由小部件的作者设置或清除。

以下为其他几种属性
Qt::WA_PaintOutsidePaintEvent
一般QPainter只能在PaintEvent事件中使用,使用此flag可以使在paintEvent 之外的函数中使用。
Qt::WA_AcceptDrops 允许将拖放操作中的数据拖放到窗口小部件上(请参阅QWidget :: setAcceptDrops())。
Qt::WA_AlwaysShowToolTips 为非活动窗口启用工具提示。
Qt::WA_DeleteOnClose 当窗口小部件接受close事件时,Qt删除此窗口小部件(请参阅QWidget :: closeEvent())。
Qt::WA_Disabled 表示窗口小部件已禁用,即它不接收任何鼠标或键盘事件。还有一个getter函数QWidget :: isEnabled()。这由Qt内核设置/清除。
Qt::WA_DontShowOnScreen 表示窗口小部件已隐藏或不是可查看桌面的一部分。
Qt::WA_MouseTracking 表示窗口小部件已启用鼠标跟踪。请参阅QWidget :: mouseTracking。
Qt::WA_NoMouseReplay 用于弹出窗口小部件(popup)。指示弹出窗口小部件关闭时不应重播最近的鼠标按下事件。该标志由小部件的作者设置,并在每次小部件接收到新的鼠标事件时由Qt内核清除。
Qt::WA_OpaquePaintEvent,paintEvent已经画好的不会被擦除,但是发现此时界面的颜色无法设置,只有一种颜色

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值