Qt与电脑管家4

news2024/9/23 0:32:40

折线图:

#ifndef LINE_CHART_H
#define LINE_CHART_H

#include <QWidget>
#include <QPainter>
#include "circle.h"
class line_chart : public QWidget
{
    Q_OBJECT
public:
    explicit line_chart(QWidget *parent = nullptr);
protected:
    void paintEvent(QPaintEvent *event) override;
private:
    QVector<int> h;
    int max,min,sum;
signals:

};

#endif // LINE_CHART_H
#include "line_chart.h"
#include <QDebug>
line_chart::line_chart(QWidget *parent) : QWidget(parent)
{
    sum=0;
    for(int i=0;i<30;i++)
    {
        if(i%5==0)h<<i;
        else{
            h<<0;
        }
    }

    //最大值,最小值
    for(int i=0;i<30;++i)
    {
        if(i==0){
            max=h.at(i);
            min=h.at(i);
        }
        else{
            if(max<h.at(i))max=h.at(i);
            if(min>h.at(i))min=h.at(i);
        }
        sum+=h.at(i);
    }
}

void line_chart::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing, true);

    //画背景
    painter.save();
    painter.setPen(Qt::NoPen);
    painter.setBrush(QBrush(QColor(255,255,255)));
    painter.drawRect(rect());
    painter.restore();
    //画横线
    painter.save();
    //确定条数
    //4,0:3
    //5,0:4
    int count=max-min-1;
    int x1,x2,y;
    x1=5;
    x2=width()-5;
    y=height()-10;
    int w=(height()-20)/count;
    QPen pen;
    pen.setColor(QColor(214, 223, 255));
    pen.setWidth(1);
    pen.setStyle(Qt::SolidLine);
    painter.setPen(pen);
    for(int i=0;i<count;++i)
    {
        painter.drawLine(x1,y,x2,y);
        y=y-w;
    }

    painter.restore();

    //画蓝色折线
    painter.save();
    double w1=width()-20;
    x1=10;
    double space=w1/(h.count()-1);
    QVector<QLine> lines;
    QPen pen1;
    pen1.setColor(QColor(133, 159, 255));
    pen1.setWidth(2);
    pen1.setStyle(Qt::SolidLine);
    painter.setPen(pen1);

    painter.setBrush(QBrush(QColor(243, 246, 255)));
    double h1=(height()-20)/(max-min);//每一小块的长度
    painter.translate(0,height()-10-10);

    for(int i=0;i<h.count()-1;++i)
    {
        double y1,y2;
        y1=(h.at(i)-min)*h1;//高度
        y2=(h.at(i+1)-min)*h1;//高度
        lines.append(QLine(x1,-y1,x1+space,-y2));
        x1+=space;
    }
    painter.drawLines(lines);
    painter.restore();

}

窗体控件透明度

QT 窗体控件的透明度设置(三种方法)_qt paint setbrush 透明_chenyazhou88的博客-CSDN博客

    opacityEffect=new QGraphicsOpacityEffect(this);
    this->setGraphicsEffect(opacityEffect);
    opacityEffect->setOpacity(0.2);

自定义按钮

#ifndef BTN5_H
#define BTN5_H

#include <QPushButton>
#include "btn1.h"
class btn5 : public btn1
{
    Q_OBJECT
public:
    btn5(QWidget * parent = nullptr);
    void set_normal_icon(QString icon);
    void init(QSize size,QSize hover_size);
protected:
    void paintEvent(QPaintEvent *) override;
    void enterEvent(QEvent *event) override;
    void leaveEvent(QEvent *event) override;
private:
    QString normal_icon;
    QSize icon_size,size,hover_size;
    bool hover;
signals:
    void mouse_enter();
    void mouse_leave();
};

#endif // BTN5_H
#include "btn5.h"
#include <QDebug>
#include <QPainter>
#pragma execution_character_set("utf-8")
#pragma execution_character_set("utf-8")
btn5::btn5(QWidget * parent ): btn1(parent)
{
    init(QSize(50,50),QSize(150,50));
    icon_size=QSize(25,25);
}

void btn5::set_normal_icon(QString icon)
{
    normal_icon=icon;
}

void btn5::init(QSize s,QSize hover_s)
{
    size=s;
    hover_size=hover_s;
    QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Fixed);
    sizePolicy1.setHorizontalStretch(0);
    sizePolicy1.setVerticalStretch(0);
    sizePolicy1.setHeightForWidth(this->sizePolicy().hasHeightForWidth());
    this->setSizePolicy(sizePolicy1);
    //宽高
    this->setMinimumSize(size);
    this->setMaximumSize(size);

    hover=false;
}


void btn5::enterEvent(QEvent *event)
{
    Q_UNUSED(event);
    qDebug()<<"进入事件发生";
    hover=true;
    //显示
}

void btn5::leaveEvent(QEvent *event)
{
    Q_UNUSED(event);
    qDebug()<<"离开事件发生";
    hover=false;
    //隐藏
}

void btn5::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing, true);

    QPen pen;
    pen.setColor(QColor(230,230,230));
    pen.setStyle(Qt::SolidLine);
    pen.setWidth(1);
    //透明背景
    painter.save();
    painter.setPen(Qt::NoPen);
    painter.setBrush(QBrush(QColor(255,255,255,0)));
    painter.drawRect(rect());
    painter.restore();

    if(!hover){
        this->setMinimumSize(size);
        this->setMaximumSize(size);
        painter.save();
        //画圆角矩形
        painter.setPen(pen);
        painter.setBrush(QBrush(QColor(255,255,255)));
        double side=qMin(width(),height());
        painter.drawRoundedRect(rect(),side/2,side/2,Qt::AbsoluteSize);
        painter.restore();

        painter.save();
        //画图标
        QPixmap pix(normal_icon);
        pix=pix.scaled(icon_size,Qt::IgnoreAspectRatio);
        painter.translate(width()/2,height()/2);
        QRectF target(-icon_size.width()/2,-icon_size.height()/2,icon_size.width(),icon_size.height());
        QRectF source(0,0,icon_size.width(),icon_size.height());
        painter.drawPixmap(target,pix,source);

        painter.restore();
    }
    else{
        this->setMinimumSize(hover_size);
        this->setMaximumSize(hover_size);

        painter.save();
        //画圆角矩形


        painter.setPen(pen);
        painter.setBrush(QBrush(QColor(255,255,255)));
        double side=qMin(width(),height());
        painter.drawRoundedRect(rect(),side/2,side/2,Qt::AbsoluteSize);
        painter.restore();

        painter.save();
        //画图标
        QPixmap pix(normal_icon);
        pix=pix.scaled(icon_size,Qt::IgnoreAspectRatio);
        //图标所占宽度:与之前一样
        painter.translate(size.width()/2,height()/2);
        QRectF target(-icon_size.width()/2,-icon_size.height()/2,icon_size.width(),icon_size.height());
        QRectF source(0,0,icon_size.width(),icon_size.height());
        painter.drawPixmap(target,pix,source);

        painter.restore();

        //画文字
        painter.save();
        painter.translate(size.width(),height()/2);
        QFont font;
        font.setPointSize(10);
        painter.setFont(font);
        QPen pen;
        pen.setColor(QColor(50,50,50));
        painter.setPen(pen);
        painter.drawText(0,-height()/2,hover_size.width()-size.width(),height(),Qt::AlignLeft | Qt::AlignVCenter,text());
        painter.restore();
    }
}

 阶段性效果图:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/908607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SecureBridge安全文件下载的组件Crack

SecureBridge安全文件下载的组件Crack SecureBridge包括SSH、SSL和SFTP客户端和服务器组件。它使用SSH或SSL安全传输层协议和加密消息语法来保护任何TCP流量&#xff0c;这些协议为客户端和服务器提供身份验证、强数据加密和数据完整性验证。SecureBridge组件可以与数据访问组件…

汽水问题!!!!

目录 题目要求&#xff1a; 题目分析&#xff1a; 代码演示&#xff1a; ​ 题目要求&#xff1a; ⽔已知1瓶汽⽔1元&#xff0c;2个空瓶可以换⼀瓶汽⽔&#xff0c;输⼊整数n&#xff08;n>0&#xff09;&#xff0c;表⽰n元钱&#xff0c;计算可以多少汽 ⽔&#xff0…

四款源代码扫描工具

一、DMSCA-企业级静态源代码扫描分析服务平台 端玛企业级静态源代码扫描分析服务平台&#xff08;英文简称&#xff1a;DMSCA&#xff09;是一个独特的源代码安全漏洞、质量缺陷和逻辑缺陷扫描分析服务平台。该平台可用于识别、跟踪和修复在源代码中的技术和逻辑上的缺陷&…

【STM32】串口通信乱码(认识系统时钟来源)

使用 stm32f407 与电脑主机进行串口通信时&#xff0c;串口助手打印乱码&#xff0c;主要从以下方面进行排查&#xff1a; 检查传输协议设置是否一致&#xff08;波特率、数据位、停止位、校验位&#xff09;检查MCU外部晶振频率是否和库函数设置的一致 最终发现是外部晶振频…

蓝桥杯上岸每日N题 (闯关)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…

Linux命令200例:telnet用于远程登录的网络协议(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

华为擎云“磨刀”,政企数字化转型“砍柴”

文|智能相对论 作者|李永华 毫无疑问&#xff0c;消费级硬件已进入稳态式红海竞争格局&#xff0c;惨烈厮杀的同时各厂商的市场地位又相对固定。 这意味着机会少的同时困难大。 于是&#xff0c;越来越多终端厂商将着力点之一转向商用市场。 华为就是其中之一。 2023年3月…

常用的软件测试工具清单,建议收藏。

常用的测试工具有10类&#xff1a; 1.测试管理工具 2.接口测试工具 3.性能测试工具 4.C/S自动化工具 5.白盒测试工具 6.代码扫描工具 7.持续集成工具 8.网络测试工具 9.app自动化工具 10.web安全测试工具 1.测试管理工具 1&#xff0c;TestDirector(大而全) 2&…

1. HBase中文学习手册之揭开Hbase的神秘面纱

揭开Hbase的神秘面纱 1.1 欢迎使用 Apache Hbase1.1.1 什么是 Hbase?1.1.2 Hbase的前世今生1.1.3 HBase的技术选型&#xff1f;1.1.3.1 不适合使用 HBase的场景1.1.3.2 适合使用 HBase的场景 1.1.4 HBase的特点1.1.4.1 HBase的优点1.1.4.2 HBase的缺点 1.1.5 HBase设计架构 1.…

Shell 脚本常用命令

Shell 脚本常用命令 一.日志打印1.信息打印效果2.占位符打印效果 二.文件检索1.文件夹查找2.文件名称3.文件内容检索 三.字符串处理1.字符串截取2.字符串长度获取3.字符串判断4.数字判断5.数字运算 四.日期获取五.文件遍历1.遍历获取修改时间和MD52.Find 查找 六.循环重试1.Whi…

解决jmeter导入jmx文件报错方法

有的时候我们导入别人的jmx文件&#xff0c;但是在导入的时候会报错&#xff0c;如下图&#xff1a; 这是缺少jmeter插件jar包所引起的&#xff0c;下载对应jar包放到jmeter安装目录对应的lib/ext下就可以了。可以通过插件管理工具包下载安装&#xff0c;也可以直接下载对应的…

Linux命令200例:tar命令主要用于创建、查看和提取归档文件(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

基于开源模型搭建实时人脸识别系统(四):人脸质量

续人脸识别实战之基于开源模型搭建实时人脸识别系统&#xff08;三&#xff09;&#xff1a;人脸关键点、对齐模型概览与模型选型_CodingInCV的博客-CSDN博客 不论对于静态的人脸识别还是动态的人脸识别&#xff0c;我们都会面临一个问题&#xff0c;就是输入的人脸图像的质量可…

用于优化开关性能的集成异质结二极管的4H-SiC沟道MOSFET

标题&#xff1a;4H-SiC Trench MOSFET with Integrated Heterojunction Diode for Optimizing Switching Performance 摘要 本研究提出了一种新型的4H-SiC沟道MOSFET&#xff0c;其在栅槽底部集成了异质结二极管&#xff08;HJD-TMOS&#xff09;&#xff0c;并通过TCAD模拟进…

Eduma主题 - 线上教育WordPress主题/网站

Eduma主题 – 线上教育WordPress主题是为教育网站、LMS、培训中心、课程中心、学院、大学、学校、幼儿园而制作的。基于我们使用以前的主题eLearning WP构建WordPress LMS的经验&#xff0c;Education WP是下一代&#xff0c;也是围绕WordPress最好的教育主题之一&#xff0c;它…

qemu - 运行树莓派

文章目录 安装 qemu下载树莓派内核使用 qemu 启动树莓派 查看 Mac 配置 uname -a我是 x86 架构&#xff0c;返回如下&#xff1a; $ uname -a Darwin S-iMac.local 22.5.0 Darwin Kernel Version 22.5.0: Mon Apr 24 20:51:50 PDT 2023; root:xnu-8796.121.2~5/RELEASE_X86_6…

基于Java SpringBoot+vue+html 的地方美食系统(2.0版本)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,csdn、博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统流程的分析3.1 用户管理的流程3.2个人中心管理流程3.3登录流程 4系统设计…

网络面试题(172.22.141.231/26,该IP位于哪个网段? 该网段拥有多少可用IP地址?广播地址是多少?)

此题面试中常被问到&#xff0c;一定要会172.22.141.231/26&#xff0c;该IP位于哪个网段&#xff1f; 该网段拥有多少可用IP地址&#xff1f;广播地址是多少&#xff1f; 解题思路&#xff1a; 网络地址&#xff1a;172.22.141.192 10101100.00010110.10001101.11000000 广播…

【react框架】如何手写一个超级mini的React,学完后对框架的理解也会更进一步

文章目录 前言起步工作先看虚拟dom长啥样写个createElement写个render第一次试验了解Fiber写个Fiber化函数改造render未完待续... 前言 本篇文章只是对https://qcsite.gatsbyjs.io/build-your-own-react/网站内容&#xff0c;做的一个内容的压缩&#xff0c;结合上自己的理解与…

iPhone卫星通信SOS功能如何在灾难中拯救生命

iPhone上的卫星紧急求救信号功能在从毛伊岛野火中拯救一家人方面发挥了至关重要的作用。这是越来越多的事件的一部分&#xff0c;在这些事件中&#xff0c;iPhone正在帮助人们摆脱危及生命的情况。 卫星提供商国际通信卫星组织负责移动的高级副总裁Mark Rasmussen在接受Lifewir…