QT继承Widget对象如何绘制圆角矩形
绘制圆角矩形控件
- QT继承Widget对象如何绘制圆角矩形
- 主要代码
- 主要逻辑
- 代码部分
- 运行结果
QT继承Widget对象如何绘制圆角矩形
有时候我们想用QT绘制一个对话框,或者菜单,这个菜单继承自Widget对象。我们想让这个对话框,或者菜单看起来更柔和,因此希望设计成圆角矩形,在这种情况下,直接使用qss的border-radius是行不通的,那我们应该怎么办呢?本文将会给你答案。
主要代码
主要逻辑
把整个Widget设置成背景透明,然后再缩小矩形绘制区域,绘制圆角矩形,然后正常在这个圆角矩形中添加控件,也可以方便的绘制阴影。
代码部分
//.h
#ifndef MYMENU_H
#define MYMENU_H#include "stdafx.h"
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QPainterPath>class MyMenu : public QWidget
{Q_OBJECTpublic:explicit MyMenu(QWidget* parent = nullptr);protected:void paintEvent(QPaintEvent* event) override;
};
#endif//.cpp
#include "stdafx.h"
#include "mymenu.h"MyMenu::MyMenu(QWidget* parent): QWidget(parent)
{// 设置固定大小setFixedSize(300, 200);// 去边框、设置背景透明setWindowFlags(Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);//设置内容边距,缩小绘制区域为圆角矩形内this->setContentsMargins(10, 10, 10, 10);QLabel* label = new QLabel("Test", this);label->setStyleSheet("color: white;");label->move(100, 100);label->show();
}void MyMenu::paintEvent(QPaintEvent* event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 抗锯齿// 创建圆角矩形路径QPainterPath path;path.addRoundedRect(rect().adjusted(DpiStyle::dpiScaled(5), DpiStyle::dpiScaled(5), DpiStyle::dpiScaled(-5), DpiStyle::dpiScaled(-5)),DpiStyle::dpiScaled(10),DpiStyle::dpiScaled(10));// 设置红色填充QColor redColor(220, 20, 60); // 深红色,可自定义painter.fillPath(path, redColor);
}