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(…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...