Qt基础 自定义消息框

news2025/2/26 3:01:43

ps:忘记copy那位大佬tip代码了,后面新增可以点选的控件

 


#pragma once

#include <QWidget>
#include <QHBoxLayout>

#define SHADOW_WIDTH 15                 // 窗口阴影宽度;
#define TRIANGLE_WIDTH 15               // 小三角的宽度;
#define TRIANGLE_HEIGHT 10              // 小三角的高度;
#define BORDER_RADIUS 5                 // 窗口边角的弧度;

class ToolWidget : public QWidget
{
	Q_OBJECT

public:
	ToolWidget(QWidget *parent = nullptr);
	~ToolWidget();
public:
	// 设置小三角起始位置;
	void setStartPos(int startX);

	// 设置小三角宽和高;
	void setTriangleInfo(int width, int height);

	// 设置中间区域widget;
	void setCenterWidget(QWidget* widget);
private:
	int boundaryWidth;
	QPoint clickPos;
	QHBoxLayout* m_hLayout;
private:
	// 小三角起始位置;
	int m_startX;
	// 小三角的宽度;
	int m_triangleWidth;
	// 小三角高度;
	int m_triangleHeight;

	QHBoxLayout* hMainLayout1;
protected:
	void paintEvent(QPaintEvent* e);
};
#include "ToolWidget.h"
#include <QPainter>
#include <QGraphicsDropShadowEffect>

ToolWidget::ToolWidget(QWidget *parent)
	: QWidget(parent)
{
	setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
	setAttribute(Qt::WA_TranslucentBackground);

	// 设置阴影边框;
	auto shadowEffect = new QGraphicsDropShadowEffect(this);
	shadowEffect->setOffset(0, 0);
	shadowEffect->setColor(Qt::black);
	shadowEffect->setBlurRadius(SHADOW_WIDTH);
	this->setGraphicsEffect(shadowEffect);
    setFixedSize(150, 200);
    m_hLayout = new QHBoxLayout(this);
}

ToolWidget::~ToolWidget()
{
}

void ToolWidget::setStartPos(int startX)
{
	m_startX = startX;
}

void ToolWidget::setTriangleInfo(int width, int height)
{
	m_triangleWidth = width;
	m_triangleHeight = height;
}

void ToolWidget::setCenterWidget(QWidget* widget)
{
    m_hLayout->addWidget(widget);
    m_hLayout->setSpacing(0);
    m_hLayout->setContentsMargins(SHADOW_WIDTH, SHADOW_WIDTH + TRIANGLE_HEIGHT + 5, SHADOW_WIDTH, SHADOW_WIDTH);
}

void ToolWidget::paintEvent(QPaintEvent* e)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
    painter.setPen(Qt::NoPen);
    painter.setBrush(QColor(0, 0, 0));

    // 小三角区域;
    QPolygon trianglePolygon;
    trianglePolygon << QPoint(m_startX, this->height() - SHADOW_WIDTH);//左下角
    trianglePolygon << QPoint(m_startX + m_triangleWidth / 2, this->height() + SHADOW_WIDTH - 20);//定点
    trianglePolygon << QPoint(m_startX + m_triangleWidth, this->height() - SHADOW_WIDTH);//右下角

/*
    QPolygon trianglePolygon;
       trianglePolygon << QPoint(m_startX, m_triangleHeight + SHADOW_WIDTH);
       trianglePolygon << QPoint(m_startX + m_triangleWidth / 2, SHADOW_WIDTH);
       trianglePolygon << QPoint(m_startX + m_triangleWidth, m_triangleHeight + SHADOW_WIDTH);
*/
    QPainterPath drawPath;
    drawPath.addRoundedRect(QRect(SHADOW_WIDTH, m_triangleHeight + SHADOW_WIDTH, \
        width() - SHADOW_WIDTH * 2, height() - SHADOW_WIDTH * 2 - m_triangleHeight), \
        BORDER_RADIUS, BORDER_RADIUS);

    // Rect + Triangle;
    drawPath.addPolygon(trianglePolygon);
    painter.drawPath(drawPath);
    QWidget::paintEvent(e);
}

使用,按钮的样式就不给了。 

    reNameBt = new QPushButton();
	addBt = new QPushButton();
	closeBt = new QPushButton();
	connect(reNameBt, &QPushButton::clicked, this, &ColourUserDlg::ReName);
	connect(addBt, &QPushButton::clicked, this, &ColourUserDlg::Copy);
	connect(closeBt, &QPushButton::clicked, this, &ColourUserDlg::Delete);
	
	
	m_pToolWidget = new ToolWidget();
	m_pToolWidget->setStartPos(65);
	m_pToolWidget->setTriangleInfo(20, 12);
	m_pToolWidget->setFixedSize(QSize(150, 80));
	reNameBt->setMaximumSize(25, 25);
	addBt->setMaximumSize(25, 25);
	closeBt->setMaximumSize(25, 25);
	m_pToolWidget->setCenterWidget(reNameBt);
	m_pToolWidget->setCenterWidget(addBt);
	m_pToolWidget->setCenterWidget(closeBt);	
	m_pToolWidget->show();

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

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

相关文章

优化 docker 容器性能慢问题

问题&#xff1a; 部署环境下tomcat容器启动缓慢&#xff0c;耗时10多分钟&#xff0c;性能较差&#xff0c;同时后端服务响应较慢。 排查&#xff1a; 宿主环境&#xff1a; docker使用情况&#xff1a; 对比结果CPU、内存使用率都不高。 针对docker环境进行检查&#xff…

浅析变电站无人值守管理的模式与特点

安科瑞虞佳豪 近年来&#xff0c;随着电网的发展&#xff0c;变电站实行无人值班管理模式已成为电网的发展方向。自1998年始&#xff0c;辉县市就开始了变电站综合自动化改造&#xff0c;截止目前全局所属24座变电站&#xff08;其中35kV19座、110kV5座&#xff09;已全部实现…

对话 ONES 联合创始人兼 CTO 冯斌:技术管理者如何打造一支自驱型团队?

熟悉冯斌的人&#xff0c;大都直接称呼其网名 Kid&#xff0c;包括他在 ONES 的同事。人如其名&#xff0c;Kid 的寓意就是「用孩子的眼光看世界」&#xff0c;返璞归真的思维方式才能发现新大陆。正如毕加索说的&#xff1a;「我一生都在向孩子学习。」 在 ONES 联合创始人兼…

基因注释R包——annotatr介绍

目录 简介安装annotatr包使用annotatr进行注释CpG注释基因注释自定义注释读取基因组区域注释区域 简介 下一代测序实验和生物信息学管道产生的基因组区域在注释基因组特征时更有意义。出现在外显子或增强子中的SNP可能比出现在基因间区域的SNP更令人感兴趣。有趣的是&#xff…

Tomcat安装与启动和配置

目录 Tomcat 简介 Tomcat 安装 Tomcat 启动和配置 文件夹作用 启动&#xff0c;关闭Tomcat&#xff1b; 常见问题 配置 环境变量 IDEA中配置Tomcat Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在…

CSDN铁粉攻略

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

DataX-一款稳定高效的数据同步工具-从安装、启动、配置、使用总结,看这篇让你一步到位

前言 大数据部门现阶段ETL按同步方式分为两种&#xff1a; 实时同步&#xff1a;DTS、CloudCanal离线同步&#xff1a;dataworks-DI节点 但CloudCanal在使用中出现了部分问题&#xff0c;归纳总结后主要为以下几点&#xff1a; 部分使用场景获取不到binlog点位停止任务&…

【面试题】中高级前端工程师都需要熟悉的技能--前端缓存

前端缓存 一、前言二、web缓存分类1. HTTP缓存&#xff1a;2. 浏览器缓存&#xff1a;3. Service Worker&#xff1a;4. Web Storage缓存&#xff1a;5. 内存缓存&#xff1a; 三、http缓存详解1、http缓存类型a. 基于有效时间的缓存控制&#xff1a;b. 基于资源标识的缓存&…

从复杂到简单:通用CRM客户管理系统改变企业管理方式

一、概述 CRM客户管理系统是通过对客户生命周期的有效管理&#xff0c;是一种重要的客户管理工具&#xff0c;可以帮助企业更好的了解客户的需求&#xff0c;提升客户满意度&#xff0c;优化销售流程、提高销售业绩等&#xff0c;随着数字经济的不断发展和普及&#xff0c;CRM…

挂耳式蓝牙耳机什么牌子好?口碑最好的挂耳式耳机

耳机的种类型号越来越繁杂&#xff0c;相比头戴式耳机和入耳式耳机&#xff0c;现在最流行的开放式耳机在减轻机体重量的同时更考量到佩戴舒适度&#xff0c;特别是运动时候&#xff0c;因其不入耳不伤耳设计&#xff0c;既稳固又舒适。考虑到大家想挑选到自己的心仪款式又能顾…

分享5个堪称神器的效率软件

今天再来推荐5个超级好用的效率软件&#xff0c;无论是对你的学习还是办公都能有所帮助&#xff0c;每个都堪称神器中的神器&#xff0c;用完后觉得不好用你找我。 1.键盘映射工具——KeyTweak KeyTweak是一款键盘映射工具&#xff0c;它可以让你自定义键盘上的每一个按键&am…

由于找不到vcomp110.dll无法继续执行此代码怎么修复

vcomp110.dll是Microsoft Visual C的一个库文件。这个库文件是在安装了Microsoft Visual C 2012 Redistributable Package之后自动安装的。vcomp110.dll是编写多线程程序所必需的&#xff0c;它包含了相关的函数和数据结构&#xff0c;可以帮助开发人员更好地利用计算机的多核处…

优质财务共享产品的十大特征

特征一&#xff1a;中台化应用 多业务系统数据源&#xff0c;包括交易平台、业务云、其他来源加全面事项库&#xff0c;综合实现能力复用、数据资源共享&#xff0c;为数据服务打基础。 特征二&#xff1a;多模式业务接入 统一业务数据采集入口、开放灵活的特性、支持多模式接…

STM32采集传感器数据通过排序取稳定值

一、前言 在物联网、单片机开发中,经常需要采集各种传感器的数据。比如:温度、湿度、MQ2、MQ3、MQ4等等传感器数据。这些数据采集过程中可能有波动,偶尔不稳定,为了得到稳定的值,我们可以对数据多次采集,进行排序,去掉最大和最小的值,然后取平均值返回。 二、排序算法…

博客系统的后端设计(八) - 实现发布博客功能

文章目录 发布博客1. 约定前后端交互接口2. 服务器代码3. 客户端代码4. 出现的问题 发布博客 在原来的编辑页面点击发布文章按钮&#xff0c;是不会有什么效果的。 这是因为此时还不能实现前后端的交互。 1. 约定前后端交互接口 请求使用 POST&#xff0c;路径是 /blog title这…

MVVM封装

MVVM封装 一.MVVM1.依赖2.mvvm封装3.业务层调用1.MainService2.MainRepository3.MainViewModel4.TestActivity 4.独立运行main业务模块 一.MVVM 1.依赖 config.gradle //jetpackdef lifecycle_version "2.5.1"libLivedata "androidx.lifecycle:lifecycle-li…

谁懂啊!性能测试还能这么快学好。。。。。。

目录 前言 &#xff08;一&#xff09;用户视角看响应时间: &#xff08;二&#xff09;运维视角看系统的使用率 mysql等数据库关注指标 JVM&#xff08;针对java技术线&#xff09;&#xff1a;Java应用程序的CPU和内存使用率 系统最大处理的任务数&#xff1a; &#…

如何完善企业性能测试流程?详解测试计划编写与实现

目录 前言&#xff1a; 性能测试流程 性能测试计划 实例代码 总结 前言&#xff1a; 在现代技术领域中&#xff0c;性能测试是非常重要的一个流程。无论是应用程序、网站、数据库等&#xff0c;都需要经过严格的性能测试&#xff0c;以确保其能够在各种条件下保持稳定的性…

RabbitMq指南:彻底解决消息可靠性问题以及实现延迟队列

提到 RabbitMq&#xff0c;想必大家都不陌生&#xff0c;我们经常使用它来进行服务之间的异步通信&#xff0c;如短信&#xff0c;日志&#xff0c;邮件发送等业务场景都可以使用 RabbitMq 实现&#xff0c;但在使用的过程中我们会遇到消息丢失的问题&#xff0c;也会有延迟消费…

SSM(Spring篇)

Spring Spring的IOC和DI Spring简介 介绍 Spring的分层Java SE\EE应用full-stack轻量级开源框架&#xff0c;以IOC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和AOP&#xff08;Aspect Oriented Programing&#xff1a;面向切面编程&#xff09;为内核…