在主窗口上拖入一个子窗口,对子窗口进行绘制,没有及时显示

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()会崩溃,因为存在递归调用。

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);
}

这样就可以立刻刷新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值