【Qt开发】常用控件(二) -> enabled

目录

[1 -> 什么是 enabled 属性](#1 -> 什么是 enabled 属性)

[2 -> API](#2 -> API)

[3 -> 代码示例](#3 -> 代码示例)

[3.1 -> 创建禁用状态按钮](#3.1 -> 创建禁用状态按钮)

[3.2 -> 通过按钮切换按钮的禁用状态](#3.2 -> 通过按钮切换按钮的禁用状态)


1 -> 什么是 enabled 属性

在 Qt 中,enabledQWidget 类的一个基础属性,它控制控件是否对用户输入做出响应。这个布尔属性决定了控件是否处于活动状态

|-----------|--------|----------|----------|
| 属性值 | 状态 | 用户交互 | 视觉效果 |
| true | 启用 | 可交互 | 正常显示 |
| false | 禁用 | 不可交互 | 通常变灰 |

2 -> API

|------------------|------------------------------------|
| API | 说明 |
| isEnabled() | 获取到控件的可用状态 |
| setEnabled() | 设置控件是否可使用。true 表示可用,false 表示禁用 |

  • 所谓 "禁用" 指的是该控件不能接收任何用户的输入事件,并且外观上往往是灰色的。
  • 如果一个 widget 被禁用,则该 widget 的子元素也被禁用。

3 -> 代码示例

3.1 -> 创建禁用状态按钮

使用代码创建一个禁用状态的按钮

widget.cpp

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

#include <QPushButton>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QPushButton* button = new QPushButton(this);
    button->setText("按钮");

    // 此时按钮处于禁用状态
    button->setEnabled(false);

    connect(button, &QPushButton::clicked, this, &Widget::handle);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::handle()
{
    qDebug() << "handle";
}

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

3.2 -> 通过按钮切换按钮的禁用状态

通过 按钮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 对象了。

2. 生成两个按钮的 slot 函数

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

widget.cpp

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    qDebug() << "执行了槽函数";
}

void Widget::on_pushButton_enable_clicked()
{
    // 切换第一个按钮的禁用状态
    // 1. 获取到第一个按钮的当前可用状态
    bool enable = ui->pushButton->isEnabled();
    if (enable)
    {
        ui->pushButton->setEnabled(false);
    }
    else
    {
        ui->pushButton->setEnabled(true);
    }
}

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

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

注意:

在 Qt Designer 中创建按钮的时候,可以设置按钮的初始状态是 "可用" 还是 "禁用"。

如果把 enabled 这一列的对钩去掉,则按钮的初始状态就是 "禁用" 状态。


感谢各位大佬支持!!!

互三啦!!!