Qt嵌入式开发避免窗口闪烁以及窗口模态设置方法

好久不写博客了,是因为最近一直在做嵌入式项目,基本每天都是很晚才能睡觉,因此也就没时间写博客了,但是始终铭记自己的初衷,认真专研Qt和OpenGL,虽然目前主要是发布Qt相关文章,但是后期也会持续发布OpenGL的相关文章,会陆续发布自己的赛车引擎,欢迎大家一起交流,希望得到大家的关注,睡觉前把自己今天开发中遇见的一些使用Qt中的的注意点写下来,鼓励自己做好开发技巧小笔记。

1.窗口无边框:

方法一:setWindowFlags(Qt::FramelessWindowHint

Window flags are a combination of a type (e.g. Qt::Dialog) and zero or more hints to the window system (e.g. Qt::FramelessWindowHint).
If the widget had type Qt::Widget or Qt::SubWindow and becomes a window (Qt::Window, Qt::Dialog, etc.), it is put at position (0, 0) on the desktop. If the widget is a window and becomes a Qt::Widget or Qt::SubWindow, it is put at position (0, 0) relative to its parent widget.
Note: This function calls setParent() when changing the flags for a window, causing the widget to be hidden. You must call show() to make the widget visible again..

大意说Qt窗口系统的组合类型可以是零个或者多个的,比如我们设置的无边框等,但是有的时候我们在嵌入式系统中采用Qt::FramelessWindowHint,设置窗口无边框的情况下会导致,窗口被点击的时候闪烁,具体依据嵌入式系统不同,这时我们还有什么办法使窗口无边框了,采用第二种吧。

方法二:setWindowFlags(Qt::CustomizeWindowHint);利用自定义窗口控件,同样可以窗口无边框,并且不会闪烁,具体和方法一Qt在处理上有啥具体区别目前还没有时间研究清楚,如果那位爱好者已经研究过,可以在博客留言,我将更新到博客内容中。

2.设置窗口模态:

方法一:setModal()

 This property holds whether show() should pop up the dialog as modal or modeless.
By default, this property is false and show() pops up the dialog as modeless. Setting his property to true is equivalent to setting QWidget::windowModality to Qt::ApplicationModal.
exec() ignores the value of this property and always pops up the dialog as modal.


 很多时候我们要使用模态对话框,这样防止用户操作主界面,而对话框依然存在,比如我做的窗口切换动画,如果不设置窗口模态,那么对话也会伴随窗口一切切换,是非常丑的,也是不符合用户习惯的,如果我们设置setModal为true的话,那么对话框是为模态,其他widget无法输入,但是往往我们是需要其他widget输入的,比如软键盘,这个时候我们就应该采用另一种方法了。

方法二:windowModality ()

This property holds which windows are blocked by the modal widget.
This property only makes sense for windows. A modal widget prevents widgets in other windows from getting input. The value of this property controls which windows are blocked when the widget is visible. Changing this property while the window is visible has no effect; you must hide() the widget first, then show() it again.

By default, this property is Qt::NonModal.
将属性设置为Qt::Qt::WindowModal,这样我们软键盘就可以很爽快的输入了,换种方式就会有不同的效果哦,生活中的快乐不止一种。

文章就到这,如果有啥想法,就请联系偶吧!QQ: 2120263292



你可能感兴趣的:(Qt)