查看完整版本: [-- 请教大神这个该如何实现 --]

QTCN开发网 -> Qt基础编程 -> 请教大神这个该如何实现 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

一只小鱼 2017-12-06 13:59

请教大神这个该如何实现

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

一只小鱼 2017-12-06 14:54
没人吗

uidab 2017-12-06 16:12
自己继承qwidget然后在paintEvent(QPaintEvent *event)里面绘制

一只小鱼 2017-12-06 16:54
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改成子窗口也没用,不知道该怎么写

一只小鱼 2017-12-06 17:06
添加一个Qwidget类的话可以绘制,但是那样的话不知道怎样实现半透明,很纠结

大漠之鹰 2017-12-06 17:58
写一个继承自QWidget的类,在子类中实现paintEvent,绘制的时候设置alpha通道的值试试看可不可以实现透明效果

笑颜 2017-12-06 18:32
一只小鱼:版主,我是这样做的,我在主窗口类中new一个widget,但是paintEvent(QPaintEvent *event)是在主窗口类中声明的,我绘制的话在主窗口上能显示,子窗口没有,我是这样写的
void ShowWidget::paintEvent(QPaintEvent *){
    painter = new QPainter;
....... (2017-12-06 16:54) 

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

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

自己继承啊 ???

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

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

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

你是编程语言没学好!

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

嗯,我C++学的不好,真心感谢您!


查看完整版本: [-- 请教大神这个该如何实现 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled