我对Qt没有多少经验,我在使用QPainter
时遇到了麻烦。
我正在尝试创建一个简单的图形小部件,它接受许多点并创建QVector
QPoints
,然后使用此向量绘制多边形。但是,我的实施现在没有出现任何内容。我相当确定我已经正确地将窗口小部件添加到窗口,因为我可以看到它应该占用的空白空间。这让我相信图形小部件中的问题。
任何帮助表示赞赏。
头:
//graph.h
#ifndef GRAPH_H
#define GRAPH_H
#include <QWidget>
#include <QPainter>
#include <QVector>
class Graph : public QWidget
{
Q_OBJECT
public:
Graph(QWidget *parent = 0);
QSize minimumSizeHint() const;
QSize maximumSizeHint() const;
QSize sizeHint() const;
void addPoint(int w, int h);
void clearPoints();
void drawGraph();
protected:
void paintEvent(QPaintEvent *event);
private:
QPen pen;
QBrush brush;
QPixmap pixmap;
QVector<QPoint> points;
};
#endif // GRAPH_H
源:
//graph.cpp
#include "graph.h"
Graph::Graph(QWidget *parent)
: QWidget(parent)
{
points.resize(0);
setBackgroundRole(QPalette::Base);
setAutoFillBackground(true);
}
void Graph::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(QPen(Qt::NoPen));
painter.setBrush(QBrush(Qt::green, Qt::SolidPattern));
painter.setRenderHint(QPainter::Antialiasing, true);
painter.drawPolygon(points);
}
QSize Graph::minimumSizeHint() const
{
return sizeHint();
}
QSize Graph::maximumSizeHint() const
{
return sizeHint();
}
QSize Graph::sizeHint() const
{
return QSize(500, 200);
}
void Graph::addPoint(int w, int h)
{
points.append(QPoint(w*2, h*2));
}
void Graph::clearPoints()
{
points.clear();
}
void Graph::drawGraph() {
points.prepend(QPoint(0,0)); //The base points of the graph
points.append(QPoint(500,0));
update();
points.clear();
}
答案 0 :(得分:4)
在drawGraph()
中,对update()
的调用会发布一个事件,通知窗口小部件自行绘制。然后清除点和drawGraph()
呼叫退出。之后,事件循环将处理更新事件并触发对paintEvent()
的调用,但到那时,要绘制的点矢量中没有点。
不要认为paintEvent()
会在窗口小部件上永久地绘制一些永久显示的内容,直到您清除它并绘制其他内容为止。 paintEvent()
需要能够在需要重绘时从头开始绘制窗口小部件。这通常是由于移动,最小化和恢复窗口小部件时系统的请求等。这意味着您的点矢量需要保留,直到您不再需要显示多边形或更改点为止。
答案 1 :(得分:0)
看起来您可能只在点数列表中添加两个点。我不认为有一个只有两个点的多边形是可能的;尝试添加第三个点,看看你是否得到一个三角形。