当前位置: 首页 > java >正文

Qt客户端技巧 -- 窗口美化 -- 圆角窗口

不解析,直接给代码例子

利用窗口重绘事件处理函数paintEvent

main.cpp

#include <QtCore/qglobal.h>
#if QT_VERSION >= 0x050000
#include <QtWidgets/QApplication>
#else
#include <QtGui/QApplication>
#endif#include "roundedwindow.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);RoundedWindow wnd{};wnd.init();return a.exec();
}

roundedwindow.h

#ifndef ROUNDEDWINDOW_H
#define ROUNDEDWINDOW_H#include <QtCore/qglobal.h>
#if QT_VERSION >= 0x050000
#include <QtWidgets/QWidget>
#else
#include <QtGui/QWidget>
#endifclass RoundedWindow : public QWidget {Q_OBJECT
public:explicit RoundedWindow(QWidget *parent = nullptr);void init();protected:void paintEvent(QPaintEvent *event) override;signals:
};#endif // ROUNDEDWINDOW_H

roundedwindow.cpp

#include "roundedwindow.h"
#include <QPainter>
#include <QPushButton>
#include <QVBoxLayout>RoundedWindow::RoundedWindow(QWidget *parent) : QWidget{parent} {/* setAttribute 与 setWindowFlag 尽量写在构造函数,写在其他操作之前 */// 背景透明this->setAttribute(Qt::WA_TranslucentBackground, true);// 无边框this->setWindowFlag(Qt::FramelessWindowHint);
}void RoundedWindow::init() {this->show();QLayout *mainLayout = new QVBoxLayout{this};QPushButton *btn = new QPushButton{this};btn->setText(QStringLiteral("你好"));mainLayout->addWidget(btn);this->setLayout(mainLayout);
}void RoundedWindow::paintEvent(QPaintEvent *event) {QPainter painter{this};painter.setRenderHint(QPainter::Antialiasing); // 抗据齿,绘图更加平滑painter.setBrush(QBrush{QColor{155, 54, 54}});painter.drawRoundedRect(this->rect(), 15, 15);
}

利用qss改变主窗口样式

main.cpp

#include <QtCore/qglobal.h>
#if QT_VERSION >= 0x050000
#include <QtWidgets/QApplication>
#else
#include <QtGui/QApplication>
#endif#include "roundedwindow.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);RoundedWindow wnd{};wnd.init();return a.exec();
}

roundedwindow.h

#ifndef ROUNDEDWINDOW_H
#define ROUNDEDWINDOW_H#include <QtCore/qglobal.h>
#if QT_VERSION >= 0x050000
#include <QtWidgets/QWidget>
#else
#include <QtGui/QWidget>
#endifclass RoundedWindow : public QWidget {Q_OBJECT
public:explicit RoundedWindow(QWidget *parent = nullptr);void init();protected:void paintEvent(QPaintEvent *event) override;signals:
};#endif // ROUNDEDWINDOW_H

roundedwindow.cpp

#include "roundedwindow.h"
#include <QPainter>
#include <QPushButton>
#include <QStyleOption>
#include <QVBoxLayout>RoundedWindow::RoundedWindow(QWidget *parent) : QWidget{parent} {/* setAttribute 与 setWindowFlag 尽量写在构造函数,写在其他操作之前 */// 背景透明this->setAttribute(Qt::WA_TranslucentBackground, true);// 无边框this->setWindowFlag(Qt::FramelessWindowHint);
}void RoundedWindow::init() {this->show();this->setStyleSheet("QWidget {"" background-color:gray;"" border-radius:15px;""}");
}void RoundedWindow::paintEvent(QPaintEvent *event) {Q_UNUSED(event);/* qwidget的qss仅支持background、background-clip和background-origin属性。* 如果您继承QWidget,则需要为自定义QWidget提供paintEvent,如下所示 */QStyleOption opt;opt.initFrom(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
http://www.xdnf.cn/news/12451.html

相关文章:

  • postman基础
  • day45python打卡
  • 特大地磁暴来袭,解析超导磁测量技术引领多领域应用突破
  • drssionPage+ddddocr 滑块验证方案
  • Unity优化篇之DrawCall
  • Python获取网易云音乐的评论
  • art-pi2 上手记录(二)
  • ㊗️高考加油
  • Linux驱动学习day2
  • Python——day46通道注意力(SE注意力)
  • EM储能网关ZWS智慧储能云应用(11) — 一级架构主从架构
  • Pycharm中添加不了新建的Conda环境(此篇专门给Daidai写的)
  • 【Linux】文件操作
  • 大数据学习(132)-HIve数据分析
  • VMware 安装 CentOS8详细教程 (附步骤截图)附连接公网、虚拟机yum源等系统配置
  • 【各种主流消息队列(MQ)对比指南】
  • Appium+python自动化(十)- 元素定位
  • 消息队列高级特性与原理:解锁分布式系统的底层逻辑
  • springcloud SpringAmqp消息队列 简单使用
  • Semaphore - 信号量
  • JavaScript 中的单例内置对象:Global 与 Math 的深度解析
  • 护网行动面试试题(1)
  • 【芯片设计- RTL 数字逻辑设计入门 4.2 -- 组合逻辑赋值 + 时序逻辑状态保持】
  • 电脑要不要经常更新系统
  • SpringBoot自动配置原理深度解析
  • JAVA毕业设计224—基于Java+Springboot+vue的家政服务系统(源代码+数据库)
  • JS实现OSS断点续传
  • 第二届智慧教育与计算机技术国际学术会议(IECT 2025)
  • 抢占2025短剧风口!专业短剧系统开发,打造您的爆款内容平台
  • vm+ubuntu24.04扩展磁盘