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

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.dtcms.com/a/235474.html

相关文章:

  • 当下AI智能硬件方案浅谈
  • JS-- for...in和for...of
  • pandas随笔
  • Google机器学习实践指南(机器学习模型泛化能力)
  • 博弈论概述
  • RockyLinux9.6搭建k8s集群
  • ComfyUI 局部重绘工作流示例
  • (nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)
  • 破壁焕新能:DeviceNET转EtherNet/IP网关赋能烟草智能制造跃迁
  • 外卖大战背后的创始人IP智慧:差异化、护城河与心智占领
  • DAY 23 pipeline管道
  • C#使用MindFusion.Diagramming框架绘制流程图(1):基础类型
  • FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
  • maven私服
  • 基于KNN算法的入侵检测模型设计与实现【源码+文档】
  • C++.OpenGL (5/64)变换(Transformation)
  • day2 大模型学习 Qwen2.5微调入门
  • salesforce sandbox 不支持 data export
  • STM32外设问题总结
  • 传统业务对接AI-AI编程框架-Rasa的业务应用实战(5)--Rasa成型可用 rasa服务化部署及识别意图后的决策及行为
  • 如何解决 远程 合并冲突
  • 前端技能包
  • 【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2
  • CSS 性能优化
  • Neo4j 集群管理:原理、技术与最佳实践深度解析
  • 【JMeter】后置处理器 - 提取器
  • 交易所系统攻坚:高并发撮合引擎与合规化金融架构设计
  • AGain DB和倍数增益的关系
  • 【Ragflow】26.RagflowPlus(v0.4.0):完善解析逻辑/文档撰写模式全新升级
  • Typeerror: cannot read properties of undefined (reading ‘XXX‘)