diff --git a/ui/button_parallelogram/bk.png b/ui/button_parallelogram/bk.png
new file mode 100644
index 00000000..aa3d6f3f
Binary files /dev/null and b/ui/button_parallelogram/bk.png differ
diff --git a/ui/button_parallelogram/button_parallelogram.pro b/ui/button_parallelogram/button_parallelogram.pro
new file mode 100644
index 00000000..37aaabe9
--- /dev/null
+++ b/ui/button_parallelogram/button_parallelogram.pro
@@ -0,0 +1,43 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2024-07-18T14:25:58
+#
+#-------------------------------------------------
+
+QT += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = button_parallelogram
+TEMPLATE = app
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
+
+CONFIG += c++11
+
+SOURCES += \
+ main.cpp \
+ widget.cpp
+
+HEADERS += \
+ widget.h
+
+FORMS += \
+ widget.ui
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+RESOURCES += \
+ image.qrc
diff --git a/ui/button_parallelogram/button_parallelogram.pro.user b/ui/button_parallelogram/button_parallelogram.pro.user
new file mode 100644
index 00000000..2654064b
--- /dev/null
+++ b/ui/button_parallelogram/button_parallelogram.pro.user
@@ -0,0 +1,323 @@
+
+
+
+
+
+ EnvironmentId
+ {b4287fa0-916a-42ac-8d9f-001e755b9a50}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ true
+ false
+ 0
+ true
+ true
+ 0
+ 8
+ true
+ 2
+ true
+ true
+ true
+ false
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop Qt 5.9.8 MinGW 32bit
+ Desktop Qt 5.9.8 MinGW 32bit
+ qt.qt5.598.win32_mingw53_kit
+ 0
+ 0
+ 0
+
+ D:/WorkSpace/learn/button_parallelogram
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ false
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Debug
+ Debug
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 2
+ true
+
+
+ D:/WorkSpace/learn/build-button_parallelogram-Desktop_Qt_5_9_8_MinGW_32bit-Release
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ false
+
+ false
+ false
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Release
+ Release
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+
+ D:/WorkSpace/learn/build-button_parallelogram-Desktop_Qt_5_9_8_MinGW_32bit-Profile
+
+
+ true
+ qmake
+
+ QtProjectManager.QMakeBuildStep
+ true
+
+ false
+ true
+ false
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ false
+
+
+ false
+
+ 2
+ Build
+
+ ProjectExplorer.BuildSteps.Build
+
+
+
+ true
+ Make
+
+ Qt4ProjectManager.MakeStep
+
+ true
+ clean
+
+ false
+
+ 1
+ Clean
+
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ Profile
+ Profile
+ Qt4ProjectManager.Qt4BuildConfiguration
+ 0
+ true
+
+ 3
+
+
+ 0
+ 部署
+
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+ Deploy Configuration
+
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+
+ false
+ false
+ 1000
+
+ true
+
+ false
+ false
+ false
+ false
+ true
+ 0.01
+ 10
+ true
+ 1
+ 25
+
+ 1
+ true
+ false
+ true
+ valgrind
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+ 10
+ 11
+ 12
+ 13
+ 14
+
+ 2
+
+ button_parallelogram
+
+ Qt4ProjectManager.Qt4RunConfiguration:D:/WorkSpace/learn/button_parallelogram/button_parallelogram.pro
+ button_parallelogram.pro
+
+ 3768
+ false
+ true
+ true
+ false
+ false
+ true
+
+ D:/WorkSpace/learn/button_parallelogram
+
+ 1
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 1
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 20
+
+
+ Version
+ 20
+
+
diff --git a/ui/button_parallelogram/image.qrc b/ui/button_parallelogram/image.qrc
new file mode 100644
index 00000000..c372525b
--- /dev/null
+++ b/ui/button_parallelogram/image.qrc
@@ -0,0 +1,5 @@
+
+
+ bk.png
+
+
diff --git a/ui/button_parallelogram/main.cpp b/ui/button_parallelogram/main.cpp
new file mode 100644
index 00000000..90b6d53f
--- /dev/null
+++ b/ui/button_parallelogram/main.cpp
@@ -0,0 +1,11 @@
+#include "widget.h"
+#include
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ Widget w;
+ w.show();
+
+ return a.exec();
+}
diff --git a/ui/button_parallelogram/ui_widget.h b/ui/button_parallelogram/ui_widget.h
new file mode 100644
index 00000000..bea0ee30
--- /dev/null
+++ b/ui/button_parallelogram/ui_widget.h
@@ -0,0 +1,75 @@
+/********************************************************************************
+** Form generated from reading UI file 'widget.ui'
+**
+** Created by: Qt User Interface Compiler version 5.9.8
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_WIDGET_H
+#define UI_WIDGET_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+QT_BEGIN_NAMESPACE
+
+class Ui_Widget
+{
+public:
+ QPushButton *pushButton;
+ QPushButton *pushButton2;
+ QPushButton *pushButton3;
+
+ void setupUi(QWidget *Widget)
+ {
+ if (Widget->objectName().isEmpty())
+ Widget->setObjectName(QStringLiteral("Widget"));
+ Widget->resize(1015, 612);
+ pushButton = new QPushButton(Widget);
+ pushButton->setObjectName(QStringLiteral("pushButton"));
+ pushButton->setGeometry(QRect(70, 70, 200, 80));
+ QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ sizePolicy.setHorizontalStretch(0);
+ sizePolicy.setVerticalStretch(0);
+ sizePolicy.setHeightForWidth(pushButton->sizePolicy().hasHeightForWidth());
+ pushButton->setSizePolicy(sizePolicy);
+ pushButton->setStyleSheet(QStringLiteral("transform:skewX(-30deg);"));
+ pushButton2 = new QPushButton(Widget);
+ pushButton2->setObjectName(QStringLiteral("pushButton2"));
+ pushButton2->setGeometry(QRect(270, 70, 200, 80));
+ sizePolicy.setHeightForWidth(pushButton2->sizePolicy().hasHeightForWidth());
+ pushButton2->setSizePolicy(sizePolicy);
+ pushButton3 = new QPushButton(Widget);
+ pushButton3->setObjectName(QStringLiteral("pushButton3"));
+ pushButton3->setGeometry(QRect(470, 70, 200, 80));
+ sizePolicy.setHeightForWidth(pushButton3->sizePolicy().hasHeightForWidth());
+ pushButton3->setSizePolicy(sizePolicy);
+
+ retranslateUi(Widget);
+
+ QMetaObject::connectSlotsByName(Widget);
+ } // setupUi
+
+ void retranslateUi(QWidget *Widget)
+ {
+ Widget->setWindowTitle(QApplication::translate("Widget", "Widget", Q_NULLPTR));
+ pushButton->setText(QApplication::translate("Widget", "PushButton", Q_NULLPTR));
+ pushButton2->setText(QApplication::translate("Widget", "PushButton", Q_NULLPTR));
+ pushButton3->setText(QApplication::translate("Widget", "PushButton", Q_NULLPTR));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class Widget: public Ui_Widget {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_WIDGET_H
diff --git a/ui/button_parallelogram/widget.cpp b/ui/button_parallelogram/widget.cpp
new file mode 100644
index 00000000..36239d36
--- /dev/null
+++ b/ui/button_parallelogram/widget.cpp
@@ -0,0 +1,46 @@
+#include "widget.h"
+#include "ui_widget.h"
+#include
+#include
+#include
+
+Widget::Widget(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::Widget)
+{
+ ui->setupUi(this);
+}
+
+Widget::~Widget()
+{
+ delete ui;
+}
+
+void Widget::showEvent(QShowEvent *event)
+{
+ ui->pushButton->setStyleSheet("background-color: red;");
+ ui->pushButton2->setStyleSheet("background-color: green;");
+ ui->pushButton3->setStyleSheet("background-color: blue;");
+
+ ui->pushButton->setText("button1");
+ ui->pushButton2->setText("button2");
+ ui->pushButton3->setText("button3");
+
+ QPixmap maskUp(":/bk.png");
+ // 获取按钮的大小
+ QRect buttonSize = ui->pushButton->geometry();
+
+ // 计算倾斜角度来获取偏移量
+ int buttonHeight = buttonSize.height();
+ double angleInRadians = qDegreesToRadians(8.0); // 假设倾斜角度为8度
+ int horizontalOffset = buttonHeight * qTan(angleInRadians);
+
+ // 将图片缩放到按钮大小
+ QPixmap scaledMask = maskUp.scaledToWidth(buttonSize.width());
+ ui->pushButton->setMask(scaledMask.mask());
+ ui->pushButton2->setMask(scaledMask.mask());
+ ui->pushButton3->setMask(scaledMask.mask());
+ // 主动布局,不使用固有布局
+ ui->pushButton2->move( ui->pushButton->pos().x() + buttonSize.width() - horizontalOffset,ui->pushButton->pos().y());
+ ui->pushButton3->move( ui->pushButton2->pos().x() + buttonSize.width() - horizontalOffset,ui->pushButton2->pos().y());
+}
diff --git a/ui/button_parallelogram/widget.h b/ui/button_parallelogram/widget.h
new file mode 100644
index 00000000..06acd30c
--- /dev/null
+++ b/ui/button_parallelogram/widget.h
@@ -0,0 +1,24 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include
+
+namespace Ui {
+class Widget;
+}
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Widget(QWidget *parent = nullptr);
+ ~Widget();
+protected:
+ void showEvent(QShowEvent *event) override; // 声明 showEvent 函数
+
+private:
+ Ui::Widget *ui;
+};
+
+#endif // WIDGET_H
diff --git a/ui/button_parallelogram/widget.ui b/ui/button_parallelogram/widget.ui
new file mode 100644
index 00000000..25addb7c
--- /dev/null
+++ b/ui/button_parallelogram/widget.ui
@@ -0,0 +1,80 @@
+
+
+ Widget
+
+
+
+ 0
+ 0
+ 1015
+ 612
+
+
+
+ Widget
+
+
+
+
+ 70
+ 70
+ 200
+ 80
+
+
+
+
+ 0
+ 0
+
+
+
+ transform:skewX(-30deg);
+
+
+ PushButton
+
+
+
+
+
+ 270
+ 70
+ 200
+ 80
+
+
+
+
+ 0
+ 0
+
+
+
+ PushButton
+
+
+
+
+
+ 470
+ 70
+ 200
+ 80
+
+
+
+
+ 0
+ 0
+
+
+
+ PushButton
+
+
+
+
+
+
+