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

Qt中QWidget自定义形状

        在Qt中,要创建自定义形状的QWidget,可以通过重写QWidgetpaintEvent()函数来实现。以下是一个简单的例子,展示了如何创建一个自定义形状的窗口:

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPainterPath>

class CustomShapeWidget : public QWidget {
protected:
    void paintEvent(QPaintEvent* event) override {
        QPainter painter(this);
        QPainterPath path;

        // 定义自定义形状路径
        path.moveTo(10, 10); // 移动到起点
        path.lineTo(10, 100); // 画一条线到达(10, 100)
        path.quadTo(100, 200, 190, 100); // 画一条二次贝塞尔曲线到达(190, 100)
        path.lineTo(190, 10); // 画一条线到达(190, 10)
        path.closeSubpath(); // 关闭路径

        // 设置填充规则
        path.setFillRule(Qt::WindingFill);

        // 应用填充规则画出自定义形状
        painter.fillPath(path, Qt::blue);

        // 画出形状边界
        painter.setPen(Qt::black);
        painter.drawPath(path);

   /************方法2*****************/
             //QPixmap mask(":/TouchWidget_test/cursor.png");//加载掩码图像
        //setMask(QBitmap(mask.mask())); //设置窗体的掩码图像,抠除图像的白色区域实现不规则窗体
        //QPalette p;//设置调色板
        //p.setBrush(QPalette::Window, QBrush(mask));//将调色板的画刷设置为掩码位图,在不规则窗体上显示出掩码位图
        //setPalette(p);
      
    }
};

int main(int argc, char* argv[]) {
    QApplication app(argc, argv);

    CustomShapeWidget window;
    window.setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
    window.setAttribute(Qt::WA_TranslucentBackground);
    window.setGeometry(100, 100, 200, 200);
    window.show();

    return app.exec();
}

        在这个例子中,我们创建了一个CustomShapeWidget类,它重写了paintEvent()函数来定义一个自定义的形状。我们使用QPainterPath来定义形状的路径,并使用fillPath()来填充路径指定的颜色。这个paintEvent()会在需要重绘窗口时被调用在这个例子中,我们创建了一个CustomShapeWidget类,它重写了paintEvent()函数来定义一个自定义的形状。我们使用QPainterPath来定义形状的路径,并使用fillPath()来填充路径指定的颜色。这个paintEvent()会在需要重绘窗口时被调用.

        运行效果如下:

方法2,也可以实现,如果要移动,可以加入移动窗口函数进行处理。


http://www.kler.cn/a/456842.html

相关文章:

  • PDF怎么压缩得又小又清晰?5种PDF压缩方法
  • springcloud各个组件介绍
  • 实际部署Dify可能遇到的问题:忘记密码、开启HTTPS、知识库文档上传的大小限制和数量限制
  • 互联网直播点播平台EasyDSS无人机视频推拉流技术实现工地远程监控巡检直播
  • 计算机网络——期末复习(4)协议或技术汇总、思维导图
  • 使用WebRTC进行视频通信
  • 基于Spring Boot的个人健康管理系统
  • 数据库课程设计-工资管理系统-MySQL
  • Gateway Timeout504 网关超时的完美解决方法
  • 自动化测试启动chrome debug模式
  • Elasticsearch检索方案之一:使用from+size实现分页
  • 基于Oauth2的SSO单点登录---前端
  • .NET周刊【12月第3期 2024-12-15】
  • 深入解析Android Framework中的android.location包:架构设计、设计模式与系统定制
  • TensorFlow深度学习实战(2)——使用TensorFlow构建神经网络
  • 一篇文章了解 Kafka
  • 深度学习训练过程图表可视化工具总结
  • Python+Django 技术实现自动化漏洞扫描系统开发
  • Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON
  • DP之背包基础
  • 出海隐私合规解决方案,一文助力中企合规出海
  • Docker安装MongoDB
  • Matrix-Breakout 2 Morpheus靶场
  • MIT实验 页表(实验部分)
  • ADC(三):注入组的使用
  • 科技创新 数智未来|清科·沙丘投研院走进竹云