• 3379阅读
  • 10回复

[讨论]请教大神这个该如何实现 [复制链接]

上一主题 下一主题
离线一只小鱼
 

只看楼主 正序阅读 楼主  发表于: 2017-12-06
我想在主窗口中点击弹出一个子窗口,设置子窗口半透明,然后想要在子窗口上绘图;我试了两种方法:1,在主窗口中new一个widegt,并设置他的背景为半透明,但我不知道怎么在子窗口上绘图;2,添加一个widget类,然后再主窗口类中new出来,这种的话可以绘图,但是我怎么设置都是全透明的,不知道为什么,本人QT新手,希望有大神可以为我解答
离线一只小鱼

只看该作者 10楼 发表于: 2017-12-07
回 笑颜 的帖子
笑颜:什么是继承?
继承一般是为了拥有父类的属性,以及重新实现父类的虚函数,因为对于一些框架,他会调用父类指针的虚函数,这样如果你继承了,就能实现多态,调用到你自己实现的虚函数。
针对这个窗口绘制问题看来说,Qt是会去调用QWidget的paintEvent函数,实现窗口的绘制,如果你 .. (2017-12-07 11:28) 

嗯,我C++学的不好,真心感谢您!
离线笑颜

只看该作者 9楼 发表于: 2017-12-07
回 一只小鱼 的帖子
一只小鱼:看了下这位大神的博文,问题解决了,博文链接:http://blog.csdn.net/doctormacky/article/details/6109515,只是不太明白为什么要重写paintEvent函数,才能实现真正的继承呢 (2017-12-07 11:14) 

什么是继承?
继承一般是为了拥有父类的属性,以及重新实现父类的虚函数,因为对于一些框架,他会调用父类指针的虚函数,这样如果你继承了,就能实现多态,调用到你自己实现的虚函数。
针对这个窗口绘制问题看来说,Qt是会去调用QWidget的paintEvent函数,实现窗口的绘制,如果你继承了QWidget,但是没有重写这个函数,Qt在调用paintEvent的时候,函数就是QWidget的实现,就是在窗口上什么也不画!当然不会有你想要的效果!

你是编程语言没学好!
离线一只小鱼

只看该作者 8楼 发表于: 2017-12-07
看了下这位大神的博文,问题解决了,博文链接:http://blog.csdn.net/doctormacky/article/details/6109515,只是不太明白为什么要重写paintEvent函数,才能实现真正的继承呢
在线uidab

只看该作者 7楼 发表于: 2017-12-06
回 一只小鱼 的帖子
一只小鱼:版主,我是这样做的,我在主窗口类中new一个widget,但是paintEvent(QPaintEvent *event)是在主窗口类中声明的,我绘制的话在主窗口上能显示,子窗口没有,我是这样写的
void ShowWidget::paintEvent(QPaintEvent *){
    painter = new QPainter;
....... (2017-12-06 16:54) 

自己继承啊 ???
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线笑颜

只看该作者 6楼 发表于: 2017-12-06
回 一只小鱼 的帖子
一只小鱼:版主,我是这样做的,我在主窗口类中new一个widget,但是paintEvent(QPaintEvent *event)是在主窗口类中声明的,我绘制的话在主窗口上能显示,子窗口没有,我是这样写的
void ShowWidget::paintEvent(QPaintEvent *){
    painter = new QPainter;
....... (2017-12-06 16:54) 

QPainter 是需要传入你要绘制的设备的 而且一般不用new,因为需要释放。常用的方式:QPainter painter(this);
离线大漠之鹰

只看该作者 5楼 发表于: 2017-12-06
写一个继承自QWidget的类,在子类中实现paintEvent,绘制的时候设置alpha通道的值试试看可不可以实现透明效果
本是后山人,偶作前堂客,醉舞经阁半卷书,坐井说天阔。大志戏功名,海斗量福祸,论到囊中羞涩时,怒指乾坤错
QQ:874164244
离线一只小鱼

只看该作者 4楼 发表于: 2017-12-06
添加一个Qwidget类的话可以绘制,但是那样的话不知道怎样实现半透明,很纠结
离线一只小鱼

只看该作者 3楼 发表于: 2017-12-06
回 uidab 的帖子
uidab:自己继承qwidget然后在paintEvent(QPaintEvent *event)里面绘制 (2017-12-06 16:12) 

版主,我是这样做的,我在主窗口类中new一个widget,但是paintEvent(QPaintEvent *event)是在主窗口类中声明的,我绘制的话在主窗口上能显示,子窗口没有,我是这样写的
void ShowWidget::paintEvent(QPaintEvent *){

    painter = new QPainter;
    painter->begin(this);
    painter->setPen(QPen(Qt::white,Qt::SolidLine));
    painter->drawEllipse(300,100,200,400);
    painter->end();}
将this改成子窗口也没用,不知道该怎么写
在线uidab

只看该作者 2楼 发表于: 2017-12-06
自己继承qwidget然后在paintEvent(QPaintEvent *event)里面绘制
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线一只小鱼

只看该作者 1楼 发表于: 2017-12-06
没人吗
快速回复
限100 字节
 
上一个 下一个