1 首先对子控件进行绘制在主窗口上直接写
QPainter painter(ui->paint_widget);
error:QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
QPainter::drawPoints: Painter not active
这样写是会报错的
2 正确写法
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->paint_widget && event->type() == QEvent::Paint)
{
showPaint(); //响应函数
}
return QWidget::eventFilter(watched,event);
}
//实现响应函数
void MainWindow::showPaint()
{
QPainter painter(ui->paint_widget);
painter.setPen(Qt::gray);
painter.setBrush(Qt::green);
painter.drawRect(10,10,200,200);
}
3 这样写完发现子窗口没有立刻刷新 调用
this->update() 也没有立刻刷新, 如果调用子窗口的ui->paint_widget->update()会崩溃,因为存在递归调用。
4
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->paint_widget && event->type() == QEvent::Paint)
{
showPaint(); //响应函数
}
else if (e->type() == QEvent::Paint && obj == this)
{
qDebug()<<"e->type() == QEvent::Paint && obj == this";
e->accept();
update();
return true;
}
return QWidget::eventFilter(watched,event);
}
这样就可以立刻刷新
2020

被折叠的 条评论
为什么被折叠?



