Qt 设计frame为一个两边是圆弧的矩形
时间: 2024-02-03 10:13:47 浏览: 124
您可以使用QPainterPath类来绘制具有圆弧边缘的矩形。以下是一个示例代码,实现了一个圆角矩形的QFrame子类:
```cpp
#include <QtWidgets>
class RoundedCornerFrame : public QFrame
{
public:
RoundedCornerFrame(QWidget *parent = nullptr) : QFrame(parent)
{
setFrameShape(QFrame::NoFrame);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
protected:
void paintEvent(QPaintEvent*) override
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QRectF rect(0, 0, width(), height());
qreal radius = qMin(rect.width(), rect.height()) / 4.0;
QPainterPath path;
path.moveTo(rect.topLeft() + QPointF(radius, 0));
path.lineTo(rect.topRight() - QPointF(radius, 0));
path.quadTo(rect.topRight(), rect.topRight() + QPointF(0, radius));
path.lineTo(rect.bottomRight() - QPointF(0, radius));
path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(radius, 0));
path.lineTo(rect.bottomLeft() + QPointF(radius, 0));
path.quadTo(rect.bottomLeft(), rect.bottomLeft() - QPointF(0, radius));
path.lineTo(rect.topLeft() + QPointF(0, radius));
path.quadTo(rect.topLeft(), rect.topLeft() + QPointF(radius, 0));
path.closeSubpath();
QBrush brush(Qt::gray);
painter.setBrush(brush);
painter.drawPath(path);
}
};
```
在这个示例中,paintEvent()函数用于绘制圆角矩形。我们使用QPainterPath类来创建一个路径,该路径绘制具有圆弧边缘的矩形。我们使用QPainter类来绘制路径,并设置抗锯齿渲染。
此外,我们还指定了矩形的大小和半径,作为一个函数的一部分,以便可以轻松自定义这些值。
最后,我们使用QBrush类来设置填充颜色,并使用QPainter类的setBrush()函数将其应用于路径。
阅读全文