重写QWidget的paintEvent虚函数,画出一个圆心坐标为(-240,-240)半径为60的半圆和一个中心坐标(120,120)长60宽30的椭圆 用C++语言实现
时间: 2024-12-15 21:21:43 浏览: 14
在C++中,为了在`QWidget`上绘制图形,你需要继承自`QWidget`并重写它的`paintEvent`函数。这个函数会在需要更新显示的时候被调用。下面是一个简单的例子,展示如何使用`QPainter`和`QStyleOption`来绘制所需的图形:
```cpp
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QStyleOption>
#include <QRectF>
class CustomWidget : public QWidget {
public:
CustomWidget(QWidget *parent = nullptr)
: QWidget(parent) {}
protected:
void paintEvent(QPaintEvent *) override {
QPainter painter(this);
QStyleOption opt;
opt.initFrom(this);
// 绘制半圆
QRectF halfCircleRect(-240.0f, -240.0f, 120.0f, 120.0f); // 半径的一半作为直径
painter.setPen(Qt::NoPen);
painter.drawArc(halfCircleRect, 180, 180); // 从180度开始画逆时针方向
// 绘制椭圆
QRectF ellipseRect(120.0f, 120.0f, 60.0f, 30.0f);
painter.drawEllipse(ellipseRect);
// 调整颜色和宽度以便更好地看到绘画效果
painter.setPen(Qt::red);
painter.setBrush(Qt::red);
painter.drawRect(QRectF(-240.0f, -240.0f, 60.0f, 60.0f)); // 全圆框
painter.drawRect(QRectF(120.0f, 120.0f, 60.0f, 30.0f)); // 椭圆框
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
CustomWidget widget;
widget.show();
return app.exec();
}
阅读全文