码迷,mamicode.com
首页 > 其他好文 > 详细

[QT]在子窗口或者控件中绘图

时间:2018-01-31 01:11:19      阅读:530      评论:0      收藏:0      [点我收藏+]

标签:过滤器   inter   ret   函数   pre   处理   告诉   color   window   

要在子窗口中绘图,有2种方法:

1.重写子窗口的控件类(即继承该类,并重载其paintEvent()方法),实现其paintEvent()方法,然后在ui里面将原来的控件提升(promote to)为新类。

(注:使用QPainter画图时,只能指定所属为当前类的引用Qpainter painter = new QPainter(this),所以应重写paintEvent())

技术分享图片

技术分享图片

填写好新类的类名及头文件名。

2.使用事件过滤器,重写eventFilter(),在子窗口或控件中注册事件过滤器(installEventFilter()),然后就可以在eventFilter()里随心所欲地重写过滤到的paintEvent()事件了。

(注:在重写的paintEvent()事件中,无法使用QPainter进行绘图)

(注:在eventFilter()中,处理完过滤事件后应调用event->ignore()函数或return true来告诉子窗口或控件,该事件已经处理过)

    ui->subwindow_tcp->installEventFilter(this);
    ui->subwindow_msg->installEventFilter(this);
bool MainWindow::eventFilter(QObject *watched, QEvent *event){

    if(watched == ui->subwindow_tcp){

        if(event->type() == QEvent::Close){
            ui->mdiArea->removeSubWindow(ui->subwindow_tcp);
            this->hassubWindow_tcp = false;
            return true;
        }
    }
    else if(watched == ui->subwindow_msg){

        if(event->type() == QEvent::Close){
            ui->mdiArea->removeSubWindow(ui->subwindow_msg);
            this->hassubWindow_msg = false;
            return true;
        }
    }
    return false;
}

 

[QT]在子窗口或者控件中绘图

标签:过滤器   inter   ret   函数   pre   处理   告诉   color   window   

原文地址:https://www.cnblogs.com/kang-l/p/8387584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!