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();


















