对于不少人都很想知道的Qt窗口类型、窗口标志和窗口属性和一些关于qt 界面题题,本文都有做详细讲解,希望对大家有所帮助。
1.窗式
QtWindowFlags枚举类型用于指定小部件的各种窗口系统属性。其中一些标志取决于默认窗口管理器是否支持它们。以下是窗口类型功能的列表
窗型
解释
Qt:QWidget
这是QWidget的基本类型。如果这种类型的窗口小部件有父窗口小部件,则它是子窗口小部件;如果它没有父窗口小部件,则它是独立窗口。
Qt:窗口
通常有一个窗口系统框架和一个标题栏。如果小部件没有父控件,则无法取消设置此标志。
Qt:对话框
对话框的标题栏中通常没有最大化或最小化按钮。dgetThis是QDialog的基本类型。如果您想将其用作模式对话框,则需要在不同的窗口中运行它。
Qt:表
macOS基于表单的窗口。使用sheet意味着一个窗口窗体,所以我建议使用QWidget:setWindowModality或QDialog:open。
Qt:抽屉
macOS抽屉式窗口。
Qt:弹出
弹出式顶级窗口,即模态窗口,但具有适合弹出菜单的窗口系统框架。
Qt:工具
工具窗口。工具窗口是一个小窗口,通常小于典型的标题栏和工具按钮栏的装饰。如果有父窗口小部件,工具窗口将始终保留在其顶部。
Qt:工具说明
工具提示窗口。这在内部用于实现没有标题栏和窗口边框的工具提示。
Qt:启动画面
启动画面。这是QSplashScreen的基本类型。
Qt:子窗口
子窗口,例如QMdiSubWindow小部件。
Qt:ForeignWindow
代表本机窗口的句柄,由另一个进程创建或使用本机代码手动创建。
Qt:CoverWindow
例如,在BlackBerry上,表示应用程序最小化时出现的覆盖窗口。
2.窗户标志
下面是可以设置的窗口标志的比较表。
窗户标志
解释
Qt:MSWindowsFixedSizeDialogHint
Windows系统固定大小窄边框窗口
Qt:X11BypassWindowManagerHint
没有窗口边框的窗口完全忽略窗口管理器,用户无法使用键盘输入,除非手动调用QWidget:activateWindow函数。
Qt:FramelessWindowHint
没有边框的窗口,无法移动或调整大小。
Qt:NoDropShadowWindowHint
禁用窗口阴影
Qt:WindowTitleHint
带标题栏的窗口
Qt:WindowSystemMenuHint
带有系统菜单和关闭按钮的窗口(如果有)。
Qt:自定义窗口提示
关闭主窗口标题提示栏。
Qt:WindowMinimizeButtonHint
向窗口添加最小化按钮
Qt:WindowMaximizeButtonHint
向窗口添加最大化按钮
Qt:窗口关闭按钮提示
向窗口添加关闭按钮
Qt:WindowContextHelpButtonHint
在窗口中添加帮助按钮
Qt:WindowShadeButtonHint
如果您的窗口管理器支持,请添加阴影按钮而不是最小化按钮。
Qt:WindowStaysOnTopHint
通知窗口系统顶部窗口
Qt:WindowStaysOnBottomHint
通知窗口系统放置在底部窗口中。
常见示例
//设置无窗口边框|将窗口设置在上面-gt;setWindowFlagsQt:FramelessWindowHint|Qt:WindowStaysOnTopHint;
Qt有一个名为WindowFlags的演示,它展示了如何使用Qt中可用的窗口标志类型来指定窗口系统属性。您可以在QtCreator软件中找到它
3.窗口属性
Qt:WidgetAttribute枚举属性可以通过setAttribute函数在QWidget对象上设置,从而改变QWidget对象的一些属性。
Qt:WA_AcceptDrops允许拖放。QWidget:setAcceptDrops是此设置的一个便利函数。
Qt:WA_DeleteOnCloseQWidget关闭时删除。
Qt:WA_Disabled设置小部件已禁用。
Qt:WA_ForceUpdatesDisabled禁用更新。即使其所有祖先都设置为“启用更新”,它仍将保持禁用状态。
Qt:WA_Hover当鼠标进入或离开小部件时,强制Qt生成绘图事件。此功能通常在实现自定义样式时使用。
Qt:WA_InputMethodEnabled启用亚洲语言的输入法。创建自定义文本编辑小部件时需要。
Qt:WA_KeyboardFocusChange当用户使用键盘时更改焦点。用于顶层窗口设置。
Qt:WA_NoChildEventsForParent小部件不希望将ChildAdded或ChildRemoved事件发送到其父级。
Qt:WA_NoChildEventsFromChildren小部件不希望接收从子元素发送的ChildAdded或ChildRemoved事件。
Qt:WA_NoMousePropagation禁用鼠标事件传播到小部件的祖先。默认情况下禁用此属性。
Qt:WA_TransparentForMouseEvents禁用将鼠标事件转发到小部件及其子部件。默认情况下禁用此属性。
Qt:WA_NoSystemBackgroundWidget没有背景。这意味着当小部件接收到绘制事件时,背景不会自动重绘。窗口设置的效果是全黑的。
Qt:WA_OpaquePaintEvent小部件在收到绘制事件时绘制所有像素。因此,在生成绘制事件之前无需更新、调整大小、滚动和更改焦点来清除小部件。
Qt:WA_PaintUnclipped防止在此小部件上操作的所有QPainter对象的绘画被审查。仅设置了Qt:WA_PaintOnScreen标志的小部件支持此标志。
Qt:WA_PaintOnScreen指示小部件应直接绘制在屏幕上。设置了此属性的小部件不参与配置管理。这意味着它们不能是半透明的或通过半透明嵌套小部件发光。双缓冲被禁用。
Qt:WA_QuitOnClose当小部件接受closeEvent作为最后一个事件时,强制Qt退出应用程序。可以使用QApplication:quitOnLastWindowClosed属性修改此行为。默认情况下,为Qt:Window类型的所有小部件设置此属性。
Qt:WA_Reished表示小部件具有明确的大小。该标志由QWidget:resize和QWidget:setGeometry设置或清除。
Qt:WA_AlwaysShowToolTips设置即使窗口禁用时也显示的提示信息。
下面重点介绍一些常用或者特殊的属性
31Qt:WA_TransparentForMouseEvents
以下是QtAssistant中Qt:WA_TransparentForMouseEvents的描述
启用后,此属性将禁用向小部件及其子部件传递鼠标事件。鼠标事件被传播到其他小部件,并且其他事件被有效地传播,就好像该小部件及其子部件不在小部件层次结构中一样。默认禁用
总体思路是
启用此属性将使发送到窗体以及窗体内的任何子控件的所有鼠标事件无效。鼠标事件被分发到其他表单组件,就好像该表单组件及其子控件没有出现在表单层次结构中一样。鼠标单击和其他鼠标事件通过此表单组件及其中的任何子控件有效地路由。默认情况下禁用此属性。
32Qt:WA_StaticContents
Qt对Qt:WA_StaticContents的描述是
指示小部件内容是西北对齐且静态的。调整大小时,这些小部件仅接收其新可见部分的绘制事件。该标志由小部件作者设置或清除。
其含义大致如下
接收绘制事件告诉表单绘制所有像素。因此,在接收绘制事件之前,表单在进行更新、调整大小、滚动条滚动、改变焦点等操作时不需要清除表单背景。启用此标志可以对不支持双缓冲的系统进行一些优化,减少闪烁并避免在绘制之前清除背景所需的耗时计算。与WA_NoSystemBackground标志不同,WA_OpaquePaintEvent不会尝试使表单背景透明。该标志由表单开发人员设置或清除。
注意有时设置WA_OpaquePaintEvent属性可能会影响窗口的背景颜色,该背景颜色是使用样式表设置的。
以上是Qt的说明。我个人的理解如下
接收绘制事件告诉表单绘制所有像素。我个人对这里“接收绘图事件”的理解是,当第一次接收到绘图事件时,即构造表单时,会绘制表单上的所有像素。
一旦表单完成,所有像素都已经按照上面的方法绘制完毕,后续所有的更新、大小改变、焦点改变、滚动条滚动等与表单相关的操作都不会清除表单背景。这意味着之前绘制的任何内容都不会被删除或重新绘制。这意味着之前绘制的图纸将不会被重新计算或重新绘制。如果你以前花了很长时间来绘制某些东西,请不要重画或重新计算。
m_pWidget代表一个子窗口。
子窗口显示整个屏幕
一
2
m_pWidget-gt;setWindowFlags-Qt:Dialog,
m_pWidget-gt;showFullScreen-,
子窗口退出整个屏幕
一
2
三
m_pWidget-gt;showNormal-,
m_pWidget-gt;setWindowFlags-Qt:SubWindow,
m_pWidget-gt;showMaximized-,
当退出全屏时,执行前两行代码后,子窗口将返回到全屏之前的位置。
但是,这是最小的,因此您应该最大化其显示。这意味着您只需要添加代码的最后一句。
尝试其他方法退出全屏。
例如,调用setWindowFlags-Qt:Dialog或setWindowFlags-Qt:SubWindow时,首先将子窗口设置为非顶级窗口。
然后我们将子窗口移动到全屏前的位置,将其大小设置为全屏前的大小,并调用showNormal-。
在这种情况下,您实际上可以退出全屏,但子窗口不会附加到其原始父窗口。
如果移动父窗口,退出全屏后,子窗口仍处于退出后的相同位置,并与父窗口分离。
要使Qt开发的界面全屏,可以使用QWidget类的setWindowState方法设置窗口状态。您可以通过将窗口状态设置为Qt:WindowFullScreen来强制窗口占据整个屏幕。
例如,您可以将代码setWindowState-Qt:WindowFullScreen添加到窗口构造函数中。这将在启动时自动使窗口全屏显示。
如果需要在运行时切换窗口的全屏状态,可以使用QWindowState-Qt:WindowFullScreen和setWindowState-Qt:WindowNoState在全屏和退出全屏之间切换。
您可能不小心按下了窗口上的最小化按钮。当用户单击“最小化窗口”按钮时,窗口将最小化到任务栏或系统托盘,从而使窗口变小。
另外,窗口大小可以设置为自适应或响应式布局。如果窗口大小不足以显示所有内容,界面会自动缩小以适应窗口大小。
如果排除以上两种情况,则可能是程序代码存在题,导致窗口大小变得不稳定,需要进一步检查修复。
No Comment