QT Widget - 随便画个圆

简介

实现在界面中画一个圆, 其实目的是想画一个LED效果的圆。

代码

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QColor>
#include <QPen>

class LEDWidget : public QWidget
{
   
public:
    LEDWidget(QWidget *parent = nullptr) : QWidget(parent) {
   }

protected:
    void paintEvent(QPaintEvent *event) override
    {
   
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);  // 反锯齿

        QPen pen;
        pen.setColor(QColor(128, 128, 128)); // 设置线颜色为浅灰色
        painter.setPen(pen);

        // 设置LED灯的颜色和大小
//        QColor ledColor(85, 239, 196); // 红色
        int ledSize = std::max(20, width() >= height() ? height() - 10 : width() - 10);
        QLinearGradient gradient(0, 0, width(), height());
        gradient.setColorAt(0, "#84fab0");
        gradient.setColorAt(1, "#8fd3f4");
        painter.setBrush(gradient);

        // 计算LED灯的位置
        int x = (width() - ledSize) / 2;
        int y = (height() - ledSize) / 2;

        // 绘制LED灯的主体
//        painter.setBrush(ledColor);
        painter.drawEllipse(x, y, ledSize, ledSize);
    }
};

int main(int argc, char *argv[]) {
   
    QApplication app(argc, argv);

    LEDWidget widget;
    widget.show();

    return app.exec();
}

代码解读

  1. 边框
		QPen pen;
        pen.setColor(QColor(128, 128, 128)); // 设置线颜色为浅灰色
        painter.setPen(pen);

此段使圆边框为浅灰色是看上去有点浅影子效果,更像LED灯;

  1. 填充
		QLinearGradient gradient(0, 0, width(), height());
        gradient.setColorAt(0, "#84fab0");
        gradient.setColorAt(1, "#8fd3f4");
        painter.setBrush(gradient);

从这个网址 添加链接描述 取色, 并实现渐变色效果, 模拟灯的亮区效果; 这里可以改成全局设置颜色,设置后按照颜色改为其他渐变色效果;

  1. 圆的大小
int ledSize = std::max(20, width() >= height() ? height() - 10 : width() - 10);

 // 计算LED灯的位置
  int x = (width() - ledSize) / 2;
  int y = (height() - ledSize) / 2;
第一个用于确保最小的圆 及 自适应效果;
计算x, y位置保持居中

效果

在这里插入图片描述

相关推荐

  1. TC 中有⼏函数?怎么使⽤?

    2023-12-18 13:42:05       7 阅读
  2. <span style='color:red;'>QWidget</span>

    QWidget

    2023-12-18 13:42:05      34 阅读
  3. 如何在three.js中3D圆弧及半圆弧组成

    2023-12-18 13:42:05       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-18 13:42:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-18 13:42:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-18 13:42:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-18 13:42:05       18 阅读

热门阅读

  1. springboot 2.7.0 集成 swagger

    2023-12-18 13:42:05       38 阅读
  2. Python3 数字(Number) ----20231215

    2023-12-18 13:42:05       40 阅读
  3. Powershell summaries with types of scales of summaries

    2023-12-18 13:42:05       43 阅读
  4. Python multiprocessing包的基本使用

    2023-12-18 13:42:05       39 阅读
  5. 设计模式_行为型模式_观察者模式

    2023-12-18 13:42:05       38 阅读
  6. 18.Oracle中的substr()函数字符截取

    2023-12-18 13:42:05       40 阅读
  7. 华为技面三轮面试题

    2023-12-18 13:42:05       41 阅读