我该怎么画一个矩形呢?
我尝试了两种不同的方法;
void MyWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
QRect rect = QRect(290, 20, 70, 40);
painter.drawText(rect, Qt::AlignCenter,
"Data");
painter.drawRect(rect);
}它工作得很好(即使参数既没有命名也没有使用),但是我不想使用QPaintEvent,我对它没有任何用处。
所以我试着重命名我的函数;
void MyWidget::draw()
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
QRect rect = QRect(290, 20, 70, 40);
painter.drawText(rect, Qt::AlignCenter,
"Data");
painter.drawRect(rect);
}这不会显示任何内容(还没有错误)。
如果我不使用QPaintEvent *,为什么它不能工作?
发布于 2013-01-01 04:00:32
paint事件是需要重新绘制小部件时由paint系统调用的方法。它不会被画图系统调用。
你真的应该使用QPaintEvent。它为您提供了需要绘制的矩形。这个rect将基于小部件的大小,所以不要在paint事件中使用显式的rect,而是将小部件设置为正确的大小。如果您的小部件发生移动、调整大小等操作,将会生成一个paint事件。
void MyWidget::paintEvent(QPaintEvent *event)
{
QRect rect = event->rect();
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
painter.drawText(rect, Qt::AlignCenter,
"Data");
painter.drawRect(rect);
}void MyWidget::paintEvent(QPaintEvent *event)
{
QRect rect = event->rect();
draw(rect);
}
void MyWidget::draw(QRect &rect)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
painter.drawText(rect, Qt::AlignCenter,
"Data");
painter.drawRect(rect);
}如果您想像您所说的那样完全绕过paint事件,并且只想创建一个静态矩形来显示,一种方法是只将它绘制一次到像素图并在QLabel中显示它:
QPixMap pix(200,100);
QPainter painter(&pix);
// do paint operations
painter.end()
someLabel.setPixmap(pix)发布于 2013-01-01 03:49:59
您的paintEvent()需要的任何数据都应该可以作为包含类的字段访问,在本例中是MyWidget的私有字段。这些私有字段可以通过“设置器”暴露给MyWidget的客户端,“设置器”将在调用MyWidget上的update()之前设置数据值,这将触发对paintEvent()的调用。
发布于 2012-12-31 21:44:29
This playlist包含了最好的Qt教程,入门教程74对你很有用(Qpainter和QPen),教程75是如何使用QRect绘制矩形。
https://stackoverflow.com/questions/14101297
复制相似问题