gpt4 book ai didi

c++ - 如何使用 QPainter 绘画?

转载 作者:可可西里 更新时间:2023-11-01 18:18:14 26 4
gpt4 key购买 nike

我最近开始学习Qt。
我不太清楚如何使用 QPainter 类进行绘画。假设我只想在窗口中放置几个​​点:


class PointDrawer: public QWidget {
Q_OBJECT
private:
QPainter p;
public:
PointDrawer(QWidget* obj=0): QWidget(obj), p(this) {}
virtual void paintEvent(QPaintEvent*) {
p.setPen(QPen(Qt::black, 3));
int n = 8;
while(...) {
qreal fAngle = 2 * 3.14 * i / n;
qreal x = 50 + cos(fAngle) * 40;
qreal y = 50 + sin(fAngle) * 40;
p.drawPoint(QPointF(x, y));
i++;
}
}
}

int main(int argc, char *argv[]) {
QApplication app(argc, argv);
PointDrawer drawer;

drawer.resize(200, 200);
drawer.show();

return app.exec();
}

在那之后,我一无所获!
你能告诉我哪里错了吗?

最佳答案

我认为问题出在您的 QPainter 初始化上。

您可以像在 hydroes 的回答中那样创建 QPainter,它看起来像这样:

class PointDrawer: public QWidget {
Q_OBJECT
public:
PointDrawer(QWidget* obj=0): QWidget(obj) {}
virtual void paintEvent(QPaintEvent*) {
QPainter p(this);
p.setPen(QPen(Qt::black, 3));
int n = 8;
while(...) {
qreal fAngle = 2 * 3.14 * i / n;
qreal x = 50 + cos(fAngle) * 40;
qreal y = 50 + sin(fAngle) * 40;
p.drawPoint(QPointF(x, y));
i++;
}
}
}

它也可以使用这样的东西,但我真的不推荐它(我只是更喜欢其他解决方案):

class PointDrawer: public QWidget {
Q_OBJECT
private:
QPainter p;
public:
PointDrawer(QWidget* obj=0): QWidget(obj) {}
virtual void paintEvent(QPaintEvent*) {
p.begin(this);
p.setPen(QPen(Qt::black, 3));
int n = 8;
while(...) {
qreal fAngle = 2 * 3.14 * i / n;
qreal x = 50 + cos(fAngle) * 40;
qreal y = 50 + sin(fAngle) * 40;
p.drawPoint(QPointF(x, y));
i++;
}
p.end();
}
}

QPainter::begin(this)QPainter::end() 调用在第二个示例中必不可少。在第一个示例中,您可以认为 QPainter::begin(this) 在构造函数中被调用,而 QPainter::end() 在析构函数中被调用

原因我猜:由于 QPaintDevice 在 QT4 中通常是双缓冲的,因此 QPainter::end() 可能是将图像传输到图形内存的地方。

关于c++ - 如何使用 QPainter 绘画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/707492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com