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

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.lryc.cn/news/2403411.html

相关文章:

  • Go语言爬虫系列教程5:HTML解析技术以及第三方库选择
  • 理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析
  • 文件上传漏洞深度解析:检测与绕过技术矩阵
  • 3.2 HarmonyOS NEXT跨设备任务调度与协同实战:算力分配、音视频协同与智能家居联动
  • Elasticsearch 海量数据写入与高效文本检索实践指南
  • jenkins集成gitlab发布到远程服务器
  • AI问答-vue3+ts+vite:http://www.abc.com:3022/m-abc-pc/#/snow 这样的项目 在服务器怎么部署
  • 当主观认知遇上机器逻辑:减少大模型工程化中的“主观性”模糊
  • 会计 - 金融负债和权益工具
  • .net Span类型和Memory类型
  • Dify工具插件开发和智能体开发全流程
  • ES6——对象扩展之Set对象
  • AI书签管理工具开发全记录(十三):TUI基本框架搭建
  • <2>-MySQL库的操作
  • Apache DolphinScheduler 和 Apache Airflow 对比
  • 初识结构体,整型提升及操作符的属性
  • 检测到 #include 错误。请更新 includePath。已为此翻译单元(D:\软件\vscode\test.c)禁用波形曲线
  • python --导出数据库表结构(pymysql)
  • 如何自动部署GitLab项目
  • 在 Windows 系统上运行 Docker 容器中的 Ubuntu 镜像并显示 GUI
  • 基于 COM 的 XML 解析技术(MSXML) 的总结
  • 多分辨率 LCD 的 GUI 架构设计与实现
  • 2025年,百度智能云打响AI落地升维战
  • Seed1.5-VL登顶,国产闭源模型弯道超车丨多模态模型5月最新榜单揭晓
  • SON.stringify()和JSON.parse()之间的转换
  • 【学习笔记】构造函数+重载相关
  • JVM——打开JVM后门的钥匙:反射机制
  • 第3章——SSM整合
  • VTK 显示文字、图片及2D/3D图
  • 小白如何在cursor中使用mcp服务——以使用notion的api为例