【Qt】控件(一) (QWidget概述和enabled)

概述

Widget是Qt中的核心概念,英文原义是"小部件",我们此处也把它翻译为"控件"。

控件是构成一个图形化界面的基本要素。

像上述示例中的,按钮,列表视图,树形视图,单行输入框,多行输入框,滚动条,下拉框等,都可以称为"控件"。

Qt作为一个成熟的GUI开发框架,内置了大量的常用控件。这一点在Qt Designer中就可以看到端倪。

并且Qt也提供了"自定义控件"的能力,可以让程序员在现有控件不能满足需求的时候,对现有控件做出扩展,或者手动创建出新的控件。

QWidget核心属性

在Qt中,使用QWidget类表示"控件"。像按钮,视图,输入框,滚动条等具体的控件类,都是继承自QWidget。

可以说,QWidget中就包含了Qt整个控件体系中,通用的部分。

在Qt Designer中,随便拖一个控件过来,选中该控件,即可在右下方看到QWidget中的属性:

这些属性既可以通过QtDesigner直接修改,也可以通过代码的方式修改。

这些属性的具体含义,在Qt Assistant中均有详细介绍。

在Qt Assistant中搜索QWidget,即可找到对应的文档说明。(或者在Qt Creator代码中,选中QWidget,按F1也可)。

核心属性概览

下列表格列出了QWidget中的属性及其作⽤.

enabled

注意:所谓"禁用"指的是该控件不能接收任何用户的输入事件,并且外观上往往是灰色的。

如果一个widget被禁用,则该widget的子元素也被禁用。

代码示例:用代码创建一个禁用状态的按钮

可以看到按钮处于灰色状态,无法被点击。

代码示例:通过按钮2切换按钮1的禁用状态。

  1. 使用Qt Designer拖两个按钮到Widget中。
    两个按钮的objectName 分别为pushButton和pushButton_2

QObject的objectName 属性介绍:

QObject是QWidget的父类,里面最主要的属性就是objectName。

在一个Qt程序中,objectName 相当于对象的身份标识,彼此之间不能重复。

在使用Qt Designer时,尤其是界面上存在多个widget的时候,可以通过objectName 获取到指定的widget对象。

Qt Designer生成的ui文件,本身是xml格式的。qmake会把这个xml文件转换成C++的.h文件(这个文件生成在build目录中),构成一个ui_widget类。

每个widget的objectName 最终就会成为ui_widget类的属性名字。

最终这个类的实例,就是Ui::Widget *ui,因此就可以通过形如ui->pushButton 或者ui->pushButton_2 这样的代码获取到界面上的widget对象了。

  1. 生成两个按钮的slot函数。

• 使用isEnabled 获取当前按钮的可用状态。

• 使用setEnabled 修改按钮的可用状态。此处是直接针对原来的可用状态进行取反后设置。

运行程序,可以看到,初始情况下,上面的按钮是可用状态。

点击下方按钮,即可使上方按钮被禁用;再次点击下方按钮,上方按钮就会解除禁用。(禁用状态的按钮为灰色,且不可点击)。

在Qt Designer中创建按钮的时候,可以设置按钮的初始状态是"可用"还是"禁用"。如果把enabled这一列的对钩去掉,则按钮的初始状态就是"禁用"状态。