JS中用一个button按钮实现开关灯效果

本文介绍了一种使用JavaScript在网页上实现开灯和关灯效果的方法。通过一个按钮,可以切换页面背景颜色,模拟灯光的开启和关闭,为用户提供了有趣的交互体验。

JS中用一个button按钮实现开关灯效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <button>关灯</button>
    <script>
        var btn = document.querySelector('button');
        var bg = document.querySelector('body');
        btn.onclick = function () {
            if (btn.innerHTML === '关灯') {
                bg.style.backgroundColor = 'black';
                btn.innerHTML = '开灯';
            }else {
                bg.style.backgroundColor = 'transparent';
                btn.innerHTML = '关灯';
            }
        }
    </script>
</body>
</html>

开灯:
kai'deng

关灯:
关灯

在 Qt 中,可以通过组件提升(Promotion)技术将一个基础控件(如 `QLabel`)提升为具有更复杂功能的自定义控件(如具备按钮功能的 `QLabel`)。这种方式允许发者在 Qt Designer 中设计界面时使用自定义控件,而无需从头编写完整的控件类。 要实现通过组件提升使 `QLabel` 具备 `QPushButton` 的功能,需遵循以下流程: ### 1. 创建自定义控件类 首先,创建一个继承自 `QLabel` 的自定义类,并为其添加按钮功能,例如鼠标点击事件、悬停效果、样式变化等。 ```cpp // custombuttonlabel.h #ifndef CUSTOMBUTTONLABEL_H #define CUSTOMBUTTONLABEL_H #include <QLabel> #include <QMouseEvent> class CustomButtonLabel : public QLabel { Q_OBJECT public: explicit CustomButtonLabel(QWidget *parent = nullptr); protected: void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void enterEvent(QEvent *event) override; void leaveEvent(QEvent *event) override; signals: void clicked(); private: bool pressed; }; #endif // CUSTOMBUTTONLABEL_H ``` ```cpp // custombuttonlabel.cpp #include "custombuttonlabel.h" CustomButtonLabel::CustomButtonLabel(QWidget *parent) : QLabel(parent), pressed(false) { setCursor(Qt::PointingHandCursor); setStyleSheet("QLabel { padding: 5px; border: 1px solid transparent; }" "QLabel:hover { border: 1px solid #888; background-color: #f0f0f0; }" "QLabel:pressed { background-color: #d0d0d0; }"); } void CustomButtonLabel::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { pressed = true; setStyleSheet("QLabel { background-color: #d0d0d0; }"); } QLabel::mousePressEvent(event); } void CustomButtonLabel::mouseReleaseEvent(QMouseEvent *event) { if (pressed && rect().contains(event->pos())) { emit clicked(); } pressed = false; setStyleSheet("QLabel { background-color: #f0f0f0; }"); QLabel::mouseReleaseEvent(event); } void CustomButtonLabel::enterEvent(QEvent *event) { QLabel::enterEvent(event); } void CustomButtonLabel::leaveEvent(QEvent *event) { QLabel::leaveEvent(event); } ``` ### 2. 在 Qt Designer 中使用 QLabel 并提升组件 1. 在 `.ui` 文件中放置一个 `QLabel`。 2. 右键点击该 `QLabel`,选择 **Promote to...**。 3. 在弹出窗口中填写: - **Promoted class name**: `CustomButtonLabel` - **Header file**: `custombuttonlabel.h` 4. 点击 **Add**,然后点击 **Promote**。 完成上述步骤后,Qt Designer 会将该 `QLabel` 替换为自定义的 `CustomButtonLabel` 类,从而具备按钮功能。 ### 3. 在代码中连接信号与槽 在主窗口或父控件中,可以像普通按钮一样连接 `CustomButtonLabel` 的 `clicked()` 信号: ```cpp connect(ui->customButtonLabel, &CustomButtonLabel::clicked, this, &MainWindow::onCustomButtonClicked); ``` ### 4. 样式与扩展功能 可以通过扩展 `CustomButtonLabel` 类来支持更多按钮特性,如: - 设置图标和文本 - 支持快捷键 - 支持不同状态下的样式切换(如禁用状态) ### 5. 使用 QSignalMapper(Qt 5)或 Lambda 表达式传递参数 若需要传递参数(如按钮 ID),可以使用 `QSignalMapper` 或直接使用 Lambda 表达式连接信号: ```cpp connect(ui->customButtonLabel, &CustomButtonLabel::clicked, [=]() { qDebug() << "Button clicked with ID: 1"; }); ``` 通过上述方法,可以在 Qt 中实现使用 `QLabel` 提升为具备按钮功能的控件,这为构建灵活的用户界面提供了更多可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值