Qt 在控件上面绘图 label,pushbutton。。。。。

举报
DreamLife 发表于 2022/04/15 22:22:50 2022/04/15
【摘要】     最近有点时间,就研究研究Qt ,提升一下自己 我记得我在刚开始学习Qt 的时候,想要在一个控件上面绘制图形,那就要构建一个新类来调用该控件的绘图函数   今天看到了狗哥的学习博客,感觉自己好渺小啊,按照狗哥的步骤,一步一步来练习,写了一个demo   Qt 之所以不能在在任意...

 

 

最近有点时间,就研究研究Qt ,提升一下自己

我记得我在刚开始学习Qt 的时候,想要在一个控件上面绘制图形,那就要构建一个新类来调用该控件的绘图函数

 

今天看到了狗哥的学习博客,感觉自己好渺小啊,按照狗哥的步骤,一步一步来练习,写了一个demo

 

Qt 之所以不能在在任意控件上面绘图,是因为Qt的事件过滤器把控件的绘图事件给过滤了,自己知识不够,盗用狗哥的话

 

“在事件过滤器eventFilter() 中拦截 Label 的 QEvent::Paint 事件”

 

代买如下

 


  
  1. bool Widget::eventFilter(QObject *watched, QEvent *event)
  2. {
  3. if(watched == ui->label && event->type() == QEvent::Paint)
  4. {
  5. magicTime();
  6. }
  7. return QWidget::eventFilter(watched,event);
  8. }


然后就是在magicTime()函数中实现自己的绘制了

 

如下demo

 


  
  1. void Widget::magicTime()
  2. {
  3. QPainter painter(ui->label);
  4. painter.setPen(Qt::gray);
  5. painter.setBrush(Qt::green);
  6. painter.drawRect(10,10,200,200);
  7. }


不过在此之间,还有一个步骤是要做的

 

 

 

ui->label->installEventFilter(this);
 

这句话是必不可少啊,

 

 

源代码地址:

Qt5.6.0mingW:http://download.csdn.net/detail/z609932088/9468793

运行截图


文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。

原文链接:dreamlife.blog.csdn.net/article/details/50952086

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。