Qt+联想电脑管家
1.自定义按钮类
效果:
(1)仅当未选中,未悬浮时
(2)其他三种情况,均如图
#ifndef BTN_H
#define BTN_H#include <QPushButton>
class btn : public QPushButton
{Q_OBJECT
public:btn(QWidget * parent = nullptr);void set_normal_icon(QString icon);void set_checked_icon(QString icon);void init();
protected:void paintEvent(QPaintEvent *) override;void enterEvent(QEvent *event);void leaveEvent(QEvent *event);
private:QString normal_icon,checked_icon;//选中,悬浮bool hover;
};#endif // BTN_H
#include "btn.h"
#include <QDebug>
#include <QPainter>
#pragma execution_character_set("utf-8")
btn::btn(QWidget * parent ): QPushButton(parent)
{//正常时,无边框//被选中时,背景变换+圆角矩形init();
}void btn::set_normal_icon(QString icon)
{normal_icon=icon;
}void btn::set_checked_icon(QString icon)
{checked_icon=icon;
}void btn::init()
{QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Fixed);sizePolicy1.setHorizontalStretch(0);sizePolicy1.setVerticalStretch(0);sizePolicy1.setHeightForWidth(this->sizePolicy().hasHeightForWidth());this->setSizePolicy(sizePolicy1);//宽高this->setMinimumSize(QSize(75, 75));this->setMaximumSize(QSize(75, 75));//可选中this->setCheckable(true);hover=false;
}void btn::enterEvent(QEvent *event)
{qDebug()<<"进入事件发生";hover=true;
}void btn::leaveEvent(QEvent *event)
{qDebug()<<"离开事件发生";hover=false;
}void btn::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing, true);if(!hover && !this->isChecked()){//画黑图标QPixmap pix(normal_icon);pix=pix.scaled(40,40,Qt::IgnoreAspectRatio);//75*75,40*40//(75-40)/2=12.5QRectF target(12.5, 12.5, 52.5, 52.5);QRectF source(0.0, 0.0, 40.0, 40.0);painter.drawPixmap(target,pix,source);}else{//画圆角矩形QRect rect(0,0,75,75);painter.setPen(Qt::NoPen);painter.setBrush(QBrush(QColor(255,255,255)));painter.drawRoundedRect(rect,10,10,Qt::AbsoluteSize);//画蓝图标QPixmap pix(checked_icon);pix=pix.scaled(40,40,Qt::IgnoreAspectRatio);//75*75,40*40//(75-40)/2=12.5QRectF target(12.5, 12.5, 52.5, 52.5);QRectF source(0.0, 0.0, 40.0, 40.0);painter.drawPixmap(target,pix,source);}
}
2.实验:
label与widget平级,label在widget上面,label显示完全

label在widget里面,label局部显示:

3.自定义按钮类2:
效果:
#ifndef BTN2_H
#define BTN2_H#include <QPushButton>
class btn2 : public QPushButton
{Q_OBJECT
public:btn2(QWidget * parent =nullptr);void get_icon(QString path);
protected:void paintEvent(QPaintEvent *) override;
private:QString icon;
};#endif // BTN2_H
#include "btn2.h"
#include <QPainter>
#include <QDebug>
#pragma execution_character_set("utf-8")
btn2::btn2(QWidget *parent):QPushButton(parent)
{}void btn2::get_icon(QString path)
{icon=path;
}void btn2::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing, true);//圆角边框QRect rect(0,0,200,75);QPen pen;pen.setColor(QColor(244,244,244));pen.setWidth(3);pen.setStyle(Qt::SolidLine);painter.setPen(pen);painter.setBrush(QBrush(QColor(255,255,255)));painter.drawRoundedRect(rect,10,10,Qt::AbsoluteSize);//蓝色图标QPixmap pix(icon);pix=pix.scaled(40,40,Qt::IgnoreAspectRatio);//75*75,40*40//(75-40)/2=12.5QRectF target(12.5, 12.5, 52.5, 52.5);QRectF source(0.0, 0.0, 40.0, 40.0);painter.drawPixmap(target,pix,source);//文字QFont font;font.setPointSize(12);font.setFamily("隶书");painter.setFont(font);painter.setPen(QColor(0,0,0));painter.drawText(52.5,0,200-52.5,75,Qt::AlignCenter,this->text());}
4.实验:
目标:得到这个蓝色矩形左上角的坐标信息:

pos : QPoint
它返回的是相对于父窗口的偏移位置,而不是最外面的窗口的。
可以使用这个函数来实现目标功能:
QPoint Form::get_pos(QWidget * w)
{QWidget * p=qobject_cast<QWidget *>(w->parent());if(p == this){return w->pos();}else{return w->pos()+get_pos(p);}
}
5.注意:在初始化函数中去获取目标位置信息,因为这时候都还没有布局好,得到的结果是错误的。
可用方法:
使用定时器延时一下
timer.singleShot(100,this,[=](){//这样就可以解决输出为0的问题了for(int i=0;i<btn1.count();++i){btn * one=btn1.at(i);one->set_absolute_pos(get_pos(one));qDebug()<<one->get_absolute_pos();}});
6.问题:

想实现这样的效果,但延迟比较大,该方案pass,想不出解决办法。
7.QButtonGroup的使用
group=new QButtonGroup(this);for(int i=0;i<btn1.count();++i){QAbstractButton * b=qobject_cast<QAbstractButton *>(btn1.at(i));group->addButton(b,i+1);}
8.去边框
导入这两个文件movable_widget.h,movable_widget.cpp
#ifndef MOVABLE_WIDGET_H
#define MOVABLE_WIDGET_H#include <QWidget>class movable_widget:public QWidget
{
public:movable_widget(QWidget * parent=0);
protected:void mouseMoveEvent(QMouseEvent *event);void mousePressEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);void paintEvent(QPaintEvent *event);
private:QPoint Pos;bool ismoving;
};#endif // MOVABLE_WIDGET_H
#include "movable_widget.h"
#include <QMouseEvent>
#include <QPainter>
movable_widget::movable_widget(QWidget * parent):QWidget(parent)
{setWindowFlag(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);}
void movable_widget::mouseMoveEvent(QMouseEvent *event)
{if(ismoving){QPoint now=event->globalPos()-Pos;move(now);}QWidget::mouseMoveEvent(event);
}void movable_widget::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){ismoving=true;Pos=event->globalPos()-pos();}QWidget::mousePressEvent(event);
}void movable_widget::mouseReleaseEvent(QMouseEvent *event)
{ismoving=false;QWidget::mouseReleaseEvent(event);
}
void movable_widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;painter.setBrush(QBrush(Qt::red));painter.setPen(Qt::transparent);QRect rect = this->rect();rect.setWidth(rect.width() - 1);rect.setHeight(rect.height() - 1);painter.drawRoundedRect(rect, 15, 15);QWidget::paintEvent(event);
}
让目标类继承movable_widget类即可

相关文章:
Qt+联想电脑管家
1.自定义按钮类 效果: (1)仅当未选中,未悬浮时 (2)其他三种情况,均如图 #ifndef BTN_H #define BTN_H#include <QPushButton> class btn : public QPushButton {Q_OBJECT public:btn(QWidget * parent nullptr);void set_normal_icon(…...
论文阅读-BotPercent: Estimating Twitter Bot Populations from Groups to Crowds
目录 摘要 引言 方法 数据集 BotPercent架构 实验结果 活跃用户中的Bot数量 Bot Population among Comment Sections Bot Participation in Content Moderation Votes Bot Population in Different Countries’ Politics 论文链接:https://arxiv.org/pdf/23…...
用于永磁同步电机驱动器的自适应SDRE非线性无传感器速度控制(MatlabSimulink实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台免费搭建 qt
Java版知识付费源码 Spring CloudSpring BootMybatisuniapp前后端分离实现知识付费平台 提供职业教育、企业培训、知识付费系统搭建服务。系统功能包含:录播课、直播课、题库、营销、公司组织架构、员工入职培训等。 提供私有化部署,免费售…...
删除注释(力扣)
删除注释 题目 给一个 C 程序,删除程序中的注释。这个程序source是一个数组,其中source[i]表示第 i 行源码。 这表示每行源码由 ‘\n’ 分隔。 在 C 中有两种注释风格,行内注释和块注释。 字符串// 表示行注释,表示//和其右侧…...
阿里云AK创建
要在阿里云上创建 Access Key(AK),您需要按照以下步骤进行操作: 登录到阿里云控制台([https://www.aliyun.com/?utm_contentse_1014243503))。 点击右上方的主账号,点击“AccessKey管理”。 …...
OC与Swift的相互调用
OC调用Swift方法 1、在 Build Settings 搜索 Packaging ,设置 Defines Module 为 YES 2、新建 LottieBridge.swift 文件,自动生成桥 ProductName-Bridging-Header.h 3、在 LottieBridge.swift 中,定义Swift类继承于OC类,声明 obj…...
某银行软件测试笔试题
(时间90分钟,满分100分) 考试要求:计算机相关专业试题 一、填空题(每空1分,共10分) 1. ______验证___是保证软件正确实现特定功能的一系列活动和过程。 2. 按开发阶段分,软件测试可…...
SpringMVC概述、SpringMVC的工作流程、创建SpringMVC的项目
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaweb 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 Spring MVC入门 一、Spring MVC概述二、入门案例2.1导入Sp…...
一文说清楚支付架构
作者:陈斌 支付的技术架构是为了保障能够顺利处理支付请求而设计的结构体系。从系统的角度看,它包括了计算机系统的软件、硬件、网络和数据等。从参与的主体角度来看,它涉及交易的付款方、收款方、支付机构、银行、卡组织和金融监管机构等。要…...
【Golang 接口自动化00】为什么要用Golang做自动化?
目录 为什么使用Golang做自动化 最终想实现的效果 怎么做? 写在后面 资料获取方法 为什么使用Golang做自动化 顺应公司的趋势学习了Golang之后,因为没有太多时间和项目来实践,怕止步于此、步Java缺少练习遗忘殆尽的后尘,决定…...
Android 架构模式如何选择
作者:vivo 互联网客户端团队-Xu Jie Android架构模式飞速演进,目前已经有MVC、MVP、MVVM、MVI。到底哪一个才是自己业务场景最需要的,不深入理解的话是无法进行选择的。这篇文章就针对这些架构模式逐一解读。重点会介绍Compose为什么要结合MV…...
深入了解 LoRaWAN® B 类设备
介绍 在 LoRaWAN 网络中,终端设备以三种模式之一运行:LoRaWAN A 类、B 类和 C 类。网络只能将消息(下行链路)发送到终端设备在两个短接收窗口之一期间处于 A 类模式,该接收窗口在设备向网络发送消息(上行链路)后立即打开。然而,这些上行链路不是预先安排的,并且可以由…...
KK集团再闯港交所:引领潮流零售市场,2023年一季度业绩增势显著
撰稿|行星 来源|贝多财经 7月31日,KK Group Company Holdings Limited(下称“KK集团”)在港交所更新招股书,补充了截至2023年3月31日的财务数据等信息,继续推进上市事宜,摩根士丹利和瑞信为其联席保荐人。…...
Vue中的组件渲染
在Vue中,组件的被渲染意味着将组件的内容转换为真实的DOM元素并添加到页面上。当Vue应用启动时,根组件会被渲染,并递归地渲染其子组件。 当组件被渲染时,Vue会将组件的模板解析成虚拟DOM(Virtual DOM)的形…...
docker 保存和载入镜像
查看本机docker镜像 docker images保存镜像 docker save -o /home/space/work1/docker_qnx7.1.tar.gz a01ee6d74c36复制镜像到其他服务器 scp /home/space/work1/docker_qnx7.1.tar.gz XXXIP:/home/dell/work1/登录新 服务器操作 docker load -i docker_qnx7.1.tar.gz载入后…...
Java框架(九)--Spring Boot入门(1)
SpringBoot 2.x入门简介 学前基础 Maven Spring MVC理念 开发环境 Spring Boot官网版本介绍 https://spring.io/projects/spring-boot#learn 我们点击 Reference Doc. ,再点击Getting Started,就可以看到官网系统环境说明了 官网系统环境说明 Sp…...
2023年第四届“华数杯”数学建模思路 - 案例:随机森林
## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。如果用图来表示他们之…...
Redis中缓存穿透、击穿、雪崩以及解决方案
Redis中缓存穿透、击穿、雪崩以及解决方案 Redis作为一个高效的内存数据库,提供了缓存能力使得我们能够快速访问数据。然而,在使用Redis作为缓存时,我们可能会面临缓存穿透、缓存击穿和缓存雪崩的问题。接下来,我将详细解释这些现…...
系统架构设计师-软件架构设计(6)
目录 一、物联网分层架构 二、大数据分层架构 三、基于服务的架构(SOA) 1、SOA的特征 2、服务构件与传统构件的区别 四、Web Service(WEB服务) 1、Web Services 和 SOA的关系 五、REST(表述性状态转移) 六、ESB(…...
gh_mirrors/prompts29/prompts高级技巧:10个方法优化你的AI引导词策略
gh_mirrors/prompts29/prompts高级技巧:10个方法优化你的AI引导词策略 【免费下载链接】Pensieve tore your decisions and principles. Claude reads them to make better choices. 项目地址: https://gitcode.com/gh_mirrors/prompts29/Pensieve Pensieve&…...
LVGL Spinner控件实战:5分钟搞定3种酷炫加载动画(附ESP32/STM32代码)
LVGL Spinner控件实战:5分钟搞定3种酷炫加载动画(附ESP32/STM32代码) 在嵌入式GUI开发中,加载动画是提升用户体验的关键细节。LVGL作为轻量级图形库,其Spinner控件能以极低资源消耗实现专业级视觉效果。本文将带你快速…...
内容资产化治理:轻量化中台驱动企业矩阵运营提质增效
摘要在企业全域矩阵运营规模化推进过程中,内容资产无序、运营流程碎片化、数据无法贯通已成为制约运营效率的核心问题。相较于重型中台高昂的部署与运维成本,基于云原生、低代码设计的轻量化内容中台,更适配中小微企业的数字化需求。本文从内…...
中国油车的新技术,挖到日本汽车的根,双管齐下真要命!
今年以来在国内市场电车攻势凌厉之下,传统油车企业却大举发布节油混动(HEV)技术,这不仅是为了与电车竞争,更是为了走向国际市场,对日本汽车最后的命根下手,进一步增强中国汽车的国际市场竞争力。…...
Flutter APK打包遇阻:深入剖析‘gen_snapshot’缺失引发的非零退出值错误
1. 问题现象:Flutter打包APK时遭遇的"拦路虎" 最近在Windows系统上用Flutter打包APK时,突然遇到了一个让人头疼的错误。执行flutter build apk命令后,控制台抛出一堆红色错误信息,最显眼的就是那句"Process finish…...
国民技术N32G455VE开发实战:JLink_V644g添加芯片全流程(附资源包)
国民技术N32G455VE开发实战:JLink_V644g环境下的芯片支持全流程解析 在嵌入式开发领域,快速搭建开发环境并实现芯片的调试支持是项目推进的关键第一步。对于采用国民技术N32G455VE这款高性能MCU的开发者来说,如何在JLink_V644g调试器中添加对…...
私车公用合规区分通勤与办公里程,核算可抵扣账务额度。
一、实际应用场景描述某科技公司实行私车公用报销制度:- 员工使用自有车辆处理公务- 公司按月报销 合理公务里程对应的用车成本- 财务需区分:- ✅ 通勤里程(不可报销)- ✅ 公务里程(可报销 可抵扣进项税)-…...
【Gartner 2024 DevOps趋势验证】:已上线智能代码生成的团队,MTTR缩短61%,但89%未启用变更影响分析——你的流水线安全吗?
第一章:智能代码生成与DevOps流水线整合 2026奇点智能技术大会(https://ml-summit.org) 现代软件交付已从“人工驱动”转向“AI协同驱动”,智能代码生成不再仅限于IDE插件中的单点辅助,而是深度嵌入CI/CD流水线各阶段,实现从需求…...
VS2019 MFC CEF(Chrome)集成实战:从环境配置到核心功能实现(含源码解析)
1. 为什么要在MFC中集成CEF? 十年前我刚接触MFC开发时,最头疼的就是界面美化问题。传统的GDI绘图方式要实现一个圆角按钮都得折腾半天,更别说复杂的动态效果了。直到发现CEF(Chromium Embedded Framework)这个神器&…...
嵌入式设备电池电量精准检测:从ADC采样误差到动态校准实践
1. 嵌入式设备电量检测的痛点与挑战 做嵌入式开发的朋友应该都遇到过这样的场景:设备明明还有电,却突然关机;或者电量显示从50%直接跳到20%,让人措手不及。这些问题背后,往往隐藏着ADC采样精度不足、硬件电路偏差、电池…...



