【QT学习笔记】QT教程:用QLabel实现LED灯闪烁的功能

为了实现用LED灯显示某个特殊状态,并以不同颜色来区分不同状态,封装以下函数:

void setLED(QLabel* label, int color, int size)
{
    // 将label中的文字清空
    label->setText("");
    // 先设置矩形大小
    // 如果ui界面设置的label大小比最小宽度和高度小,矩形将被设置为最小宽度和最小高度;
    // 如果ui界面设置的label大小比最小宽度和高度大,矩形将被设置为最大宽度和最大高度;
    QString min_width = QString("min-width: %1px;").arg(size);              // 最小宽度:size
    QString min_height = QString("min-height: %1px;").arg(size);            // 最小高度:size
    QString max_width = QString("max-width: %1px;").arg(size);              // 最小宽度:size
    QString max_height = QString("max-height: %1px;").arg(size);            // 最小高度:size
    // 再设置边界形状及边框
    QString border_radius = QString("border-radius: %1px;").arg(size/2);    // 边框是圆角,半径为size/2
    QString border = QString("border:1px solid black;");                    // 边框为1px黑色
    // 最后设置背景颜色
    QString background = "background-color:";
    switch (color) {
    case 0:
        // 灰色
        background += "rgb(190,190,190)";
        break;
    case 1:
        // 红色
        background += "rgb(255,0,0)";
        break;
    case 2:
        // 绿色
        background += "rgb(0,255,0)";
        break;
    case 3:
        // 黄色
        background += "rgb(255,255,0)";
        break;
    default:
        break;
    }

    const QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
    label->setStyleSheet(SheetStyle);
}

只需调用以上函数来修改并赋值创建的QLabel控件,不同状态下切换不同颜色即可。

只需注意函数void setLED(QLabel* label, int color, int size)的三个形参的相关赋值。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以通过继承 QLabel 类并重写鼠标事件来实现旋钮功能,并在超过范围后回弹。 以下是一个简单的实现示例: ```cpp class KnobLabel : public QLabel { public: KnobLabel(QWidget *parent = nullptr) : QLabel(parent) { setAlignment(Qt::AlignCenter); setMouseTracking(true); setFixedSize(50, 50); setStyleSheet("QLabel {border-radius: 25px; border: 1px solid black;}"); m_value = 0; m_minValue = 0; m_maxValue = 100; } int value() const { return m_value; } void setValue(int value) { if (value < m_minValue) { m_value = m_minValue; } else if (value > m_maxValue) { m_value = m_maxValue; } else { m_value = value; } setText(QString::number(m_value)); } int minValue() const { return m_minValue; } void setMinValue(int minValue) { m_minValue = minValue; } int maxValue() const { return m_maxValue; } void setMaxValue(int maxValue) { m_maxValue = maxValue; } protected: void mousePressEvent(QMouseEvent *event) override { if (event->button() == Qt::LeftButton) { m_lastPos = event->pos(); } } void mouseMoveEvent(QMouseEvent *event) override { if (event->buttons() & Qt::LeftButton) { QPoint delta = event->pos() - m_lastPos; int valueDelta = delta.y() / 10; setValue(m_value - valueDelta); m_lastPos = event->pos(); } } void mouseReleaseEvent(QMouseEvent *event) override { Q_UNUSED(event); if (m_value < m_minValue) { setValue(m_minValue); } else if (m_value > m_maxValue) { setValue(m_maxValue); } } private: int m_value; int m_minValue; int m_maxValue; QPoint m_lastPos; }; ``` 在上面的代码中,我们继承了 QLabel 类,并重写了 mousePressEvent、mouseMoveEvent 和 mouseReleaseEvent 事件。在 mousePressEvent 中,我们记录了当前鼠标位置作为起始位置。在 mouseMoveEvent 中,我们计算出鼠标移动的距离,并将其转化为旋钮的值的变化量。在 mouseReleaseEvent 中,我们检查当前值是否超出了范围,并将其回弹到范围内。我们还定义了一些用于设置旋钮值和范围的公共函数。 使用时,可以将 KnobLabel 添加到窗口中,并设置旋钮的最小值、最大值和初始值: ```cpp KnobLabel *knob = new KnobLabel(this); knob->setMinValue(0); knob->setMaxValue(100); knob->setValue(50); ``` 这样就可以在窗口中显示一个旋钮了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IIIIIII_II

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值