Qt 控件发展历程 + 目标(1)

发布于:2025-05-21 ⋅ 阅读:(23) ⋅ 点赞:(0)

简介:这篇文章只是一个引子,介绍一点与控件相关的但不重要的内容(浏览浏览即可),这一章节最为重要的还是要把之后常用且重要的控件属性和作用给学透,学清楚,学明白

声明

  1. 图形化界面的程序

    • 在实现图形化界面的程序时,Qt 框架已经为我们提供了许多 “控件”。我们需要学习和了解这些控件,并学会如何使用它们。编程讲究的是 “站在巨人的肩膀上”,而不是 “从头发明轮子”。
  2. 控件的使用

    • 一个图形化界面上的内容,不需要我们全都从零实现。Qt 中已经提供了很多内置的控件,比如按钮、文本框、单选按钮、复选按钮、下拉框等。我们可以直接拿过来使用。
  3. 控件(Widget)

    • 定义 :控件(Widget)是界面上的各种元素和各种部分的统称。
    • 别名 :也被称为小组件或小部件,但 “控件” 这个词听起来更专业。
  4. Java 相关知识

    • 隔壁 Java 的圈子里特别讲究一些概念。例如,在 JavaSE 中会学到 “包装类”,以及 “自动装箱” 和 “自动拆箱”。
    • 自动装箱与拆箱 :这是将 int、double 等内置类型使用 class 进行封装的一种机制。
    • 包装类:隐式类型转换。

通过利用 Qt 提供的控件,我们可以高效地构建图形化界面,无需重复造轮子,提高开发效率。

简述控件的发展历程

  • 上古时期的GUI

    • 在那个年代开发GUI并没有啥控件概念,那界面上显示出来的东西基本上全部都是画出来的。你可以将显示器理解成一块画布,那显示器显示的内容就可以对应理解成:操作系统可以提供一些API接口让你在这个画布上随便写写画画(比如画点,画线,画圆,再填充上各自颜色等等)。

    • 在这个环境下,开发一个图形化界面的程序就相当于设计一个界面,在这个界面上去画矩形,插入文字等等。这种风格的开发已经非常古老了,基本上现在看不到了。
      在这里插入图片描述

    • 比如当时的电子词典所设计图形化界面程序就是采用这种风格,当时是在这个LAVA平台上开发的

      在这里插入图片描述

  • 过渡时期的GUI

    • 后来控件这样的概念就逐渐被引入,那早期的控件比较简单,数量非常有限,那风格自然也比较简朴。比如当时的HTML已经包含了许多标签,不同的标签就会有不同的效果(< img >图片,< a >链接,< input > 输入框等等)
      在这里插入图片描述
  • 现代的GUI

    • 那随着时代的发展,新的GUI开发体系也随之越来越丰富,提供的控件数量/质量也随之提升
      在这里插入图片描述
    • 这里还是要说明的一点是:虽然Qt的控件也很多,但是从整体上来看,相比于更现代的控件体系,其颜值还是要稍逊一筹的,看起来还是很简朴的。不过Qt它没有从历史洪流中褪去,正是因为Qt也在不断的进化与更新,时刻赶追时代潮流。虽然Qt Designer中展示的控件都是默认的样子,不过Qt也提供了一些优化手段,可以让控件变得更加好看
    • 比如近几年Qt提供了Qt Design Studio,它就是对标现代化的界面体系了。制造出来界面的美观程度在业界也是独一档的存在,不过是要收费的,它好像也是存在社区版本的,可以去了解一下。其实开发图形化界面程序,颜值绝对称的上是一件非常重要的事情(具体还是要看应用场景)

学习目标

  1. 在 Qt 中使⽤ QWidget 类表⽰ “控件”,像按钮,视图,输⼊框,滚动条等具体的控件类,都是继承⾃QWidget。可以说,QWidget 中就包含了 Qt 整个控件体系中通⽤的部分。在 Qt Designer 中, 随便拖⼀个控件过来,选中该控件即可在右下⽅看到 QWidget 中的属性
  2. 在Qt Creator的右则可以看到QWidget的各自属性,也可以在这里直接进行编辑,下面红色框框的属性的具体意思都可以通过Qt 的文档来逐个进行了解,不过这些属性不需要咱们每一个都了解得清清楚楚,只需要认识其中一些非常常用的,重要的属性即可

在这里插入图片描述

QWidget属性

下面列出了QWidget的属性和对应的作用,咱们接下来就是要去学习其中一些比较重要常用的属性,并结合相应的代码进行分析和阐述,下面的先了解一下即可

  1. enabled :设置控件是否可使用。true 表示可用,false 表示禁用。

  2. geometry :位置和尺寸。包含 x, y, width, height 四个部分。其中坐标是以父元素为参考进行设置的。

  3. windowTitle :设置 widget 标题。

  4. windowIcon :设置 widget 图标。

  5. windowOpacity :设置 widget 透明度。

  6. cursor :鼠标悬停时显示的图标形状。可以是普通箭头、沙漏、十字等形状。在 Qt Designer 界面中可以清楚看到可选项。

  7. font :字体相关属性。涉及到字体家族、字体大小、粗体、斜体、下划线等等样式。

  8. toolTip :鼠标悬停在 widget 上会在状态栏中显示的提示信息。

  9. toolTipDuring :toolTip 显示的持续时间。

  10. statusTip :Widget 状态发生改变时显示的提示信息(比如按钮被按下等)。

  11. whatsThis :鼠标悬停并按下 alt + F1 时,显示的帮助信息(显示在一个弹出的窗口中)。

  12. styleSheet :允许使用 CSS 来设置 widget 中的样式。Qt 中支持的样式非常丰富,对于前端开发人员上手是非常友好的。

  13. focusPolicy :该 widget 如何获取到焦点。
    * Qt::NoFocus :控件不参与焦点管理,即无法通过键盘或鼠标获取焦点。
    * Qt::TabFocus :控件可以通过 Tab 键获得焦点。
    * Qt::ClickFocus :控件可以通过鼠标点击获得焦点。
    * Qt::StrongFocus :控件可以通过键盘和鼠标获得焦点。
    * Qt::WheelFocus :控件可以通过鼠标滚轮获得焦点(在某些平台或样式中可能不可用)。

  14. contextMenuPolicy :上下文菜单的显示策略。
    * Qt::DefaultContextMenu :默认的上下文菜单策略,用户可以通过鼠标右键或键盘快捷键触发上下文菜单。
    * Qt::NoContextMenu :禁用上下文菜单,即使用户点击鼠标右键也不会显示菜单。
    * Qt::PreventContextMenu :防止控件显示上下文菜单,即使用户点击鼠标右键也不会显示菜单。
    * Qt::ActionsContextMenu :将上下文菜单替换为控件的 “动作” 菜单,用户可以通过鼠标右键或键盘快捷键触发这个菜单。
    * Qt::CustomContextMenu :使用自定义的上下文菜单,用户可以通过鼠标右键或键盘快捷键触发这个菜单。

  15. locale :设置语言和国家地区。

  16. acceptDrops :该部件是否接受拖放操作。如果设置为 true,那么该部件就可以接收来自其他部件的拖放操作。当一个部件被拖放到该部件上时,该部件会接收到相应的拖放事件(如 dropEvent)。如果设置为 false,那么该部件将不会接收任何拖放操作。

  17. minimumSize :控件的最小尺寸。包含最小宽度和最小高度。

  18. maximumSize :控件的最大尺寸。包含最大宽度和最大高度。

  19. sizePolicy :尺寸策略。设置控件在布局管理器中的缩放方式。

  20. windowModality :指定窗口是否具有 “模态” 行为。

  21. sizeIncrement :拖动窗口大小时的增量单位。

  22. baseSize :窗口的基础大小。用来搭配 sizeIncrement 调整组件尺寸,以计算组件应该调整到的合适的值。

  23. palette :调色板。可以设置 widget 的颜色风格。

  24. mouseTracking :是否要跟踪鼠标移动事件。如果设为 true,表示需要跟踪,则鼠标划过的时候该 widget 就能持续收到鼠标移动事件。如果设为 false,表示不需要跟踪,则鼠标划过的时候 widget 不会收到鼠标移动事件,只能收到鼠标按下或者释放的事件。

  25. tabletTracking :是否跟踪触摸屏的移动事件。类似于 mouseTracking,是 Qt 5.9 中引入的新属性。

  26. layoutDirection :布局方向。
    * Qt::LeftToRight :文本从左到右排列,也是默认值。
    * Qt::RightToLeft :文本从右到左排列。
    * Qt::GlobalAtomics :部件的布局方向由全局原子性决定。

  27. autoFillBackground :是否自动填充背景色。

  28. windowFilePath :能够把 widget 和一个本地文件路径关联起来。PS:其实作用不大。

  29. accessibleName :设置 widget 的可访问名称。这个名称可以被辅助技术(像屏幕阅读器)获取到。这个属性用于实现无障碍程序的场景中(也就是给盲人写的程序)。PS:其实盲人也是可以使用电脑和手机的,甚至盲人还能成为程序猿。参见链接

  30. accessibleDescription :设置 widget 的详细描述。作用同 accessibleName。

  31. inputMethodHints :针对输入框有效,用来提示用户当前能输入的合法数据的格式。比如只能输入数字,只能输入日期等。