【Qt】QWidegt的enable属性

enabled:描述了一个控件是否处于"可用"状态(相对的概念"禁用")。

API 说明
isEnabled() 获取到控件的可⽤状态
setEnabled 设置控件是否可使⽤. true 表⽰可⽤, false 表⽰禁⽤
  • 所谓"禁用"指的是该控件不能接收任何用户的输入事件,并且外观上往往是灰色的。
  • 如果一个Widget被禁用,则该widget的子元素也被禁用。

例子:创建出一个禁用的按钮

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->setEnabled(false);
    //将按钮信号与槽建立联系
    connect(button, &QPushButton::clicked, this, &Widget::handleButton);

}

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

void Widget::handleButton()
{
    qDebug() << "按钮未被禁用";
}

此时,按钮已经被禁用,处于灰色状态。

使用一个按钮控制另外一个按钮的状态的例子

首先,设置俩个按钮的时候需要注意俩个按钮的objectName。

在同一个界面中,要求不同的控件的objectName也是必须不同的(即不能重复),这样就可以通过ui->objectName的方式获取到对应的控件类型了。

例如:

ui->pushButton //获取到第一个按钮对应的对象。

ui->pushButton //获取到第二个按钮对应的对象。

在这里,Qt会根据ui文件,生成一个ui_widget.h文件生成的过程中就会感知到,界面上的控件及每个控件的objectName。

当前自动生成的objectName有一定规律,即根据控件的类型+下划线+数字。

但是,以数字的方式命名,不是一个好的编程习惯,可以手动更改合适的命名。

下面进行对执行俩个按钮点击信号后的槽函数:

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()
{
    //调整上面按钮的禁用状态
    //第一步:获取到上面当前按钮的状态
    bool enable = ui->pushButton->isEnabled();
    //第二步:调整上面当前按钮的状态
    if(enable)
    {
        ui->pushButton->setEnabled(false);
    }
    else
    {
        ui->pushButton->setEnabled(true);
    }
}
相关推荐
是个西兰花17 小时前
Linux:深入解析Linux线程原理与实现
linux·运维·c++·线程·互斥锁
多加点辣也没关系17 小时前
JavaScript|第24章:事件循环与并发模型
开发语言·javascript·ecmascript
ん贤17 小时前
怎么设计,才算一个优秀审计模块
大数据·开发语言·设计·审计
l1t17 小时前
测试用rust重写的postgresql: pgrust
开发语言·postgresql·rust
2501_9481069117 小时前
计算机毕业设计之jsp-智慧旅游分享平台
java·开发语言·spark·汽车·课程设计·旅游
阿里云云原生18 小时前
Agent 不再是“玩具”!AgentScope Java 2.0 GA 发布:构建企业级分布式智能体底座
java·开发语言·分布式·agentscope
BIM云平台开发18 小时前
【App.vue里跟踪页面跳转和用户ID】
开发语言·前端·javascript
NiceCloud喜云18 小时前
ClaudeAPI 接入 n8n / Dify / Open WebUI 实战:Base URL 配置、调用示例与排错
开发语言·ai·chatgpt·aigc
小保CPP18 小时前
OCR C++ Tesseract基础用法
c++·人工智能·ocr·模式识别·光学字符识别
庵中十三居士18 小时前
【纯AI无人工修改】AI Agent从0到1实战:50行Python手写核心循环,一次看懂所有Agent框架的底层逻辑
开发语言·人工智能·python