当前位置: 首页 > 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);
}

相关文章:

  • 当下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服务化部署及识别意图后的决策及行为
  • 鞍山+网站建设/整站优化
  • html 网站首页/百度手机助手最新版下载
  • 网站建设的基本过程/搜索引擎提交入口大全
  • 推荐做木工的视频网站/深圳seo技术
  • 重庆企业网站推广/公司网站怎么建立
  • 网站建设是广告么/百度网站推广排名