Qt中QWidget自定义形状
在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,也可以实现,如果要移动,可以加入移动窗口函数进行处理。