在Qt中,要创建自定义形状的QWidget
,可以通过重写QWidget
的paintEvent()
函数来实现。以下是一个简单的例子,展示了如何创建一个自定义形状的窗口:
#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,也可以实现,如果要移动,可以加入移动窗口函数进行处理。