我怎么能画一个点在我的QFrame,我想用qt来做到这一点?



我想在我的QFrame中绘制一个像素,我像这样覆盖我的painEvent函数:

void MainBoard::paintEvent(QPaintEvent *event)
{
QFrame::paintEvent(event);
QPainter painter(this);
point.paintPoint(event,100,100);
}

和我的类点有函数

class Point: public QWidget
{
public:
void paintPoint(QPaintEvent *event,  int x, int y)
{
QWidget::paintEvent(event);
QPainter painter(this);
painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
painter.drawLine(x, y, x+1, y+1);
}
};

它不工作,什么是错误的?

错误是

QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active

您正在从Qt不期望它的上下文中调用Point对象上的QWidget::paintEvent(event)-即从MainBoard::paintEvent(QPaintEvent *)内。通常在Qt中,你永远不会在不同的部件上显式地调用paintEvent();Qt的事件循环代码会在适当的时候为你调用它。

我建议删除对QWidget::paintEvent(event)的调用,并将对QPainter的引用传递给paintPoint()而不是QPaintEvent。(事实上,没有任何理由有Point子类QWidget,如果你只是想用它来画一个点;你可以通过调用painter.drawLine()来大大简化事情,或者更好的是,必要时直接从MainBoard::paintEvent()调用painter.drawPoint()

相关内容

最新更新