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,也可以实现,如果要移动,可以加入移动窗口函数进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十启树

您的认可是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值