为什么要增加一个透明背景才能执行paintevent函数?
先贴代码,
只要窗体发送变化,或者是update(),就会去执行paintevent函数,可是这里
为什么要添加透明QWidget,相应的paintEvent才能执行,单步调试发现,如果屏蔽透明QWidget那部分代码,paintevent函数不执行,定时器再刷新,应该每1s去执行一次paintevent函数才对?
为什么?谢谢
只要窗体发送变化,或者是update(),就会去执行paintevent函数,可是这里
为什么要添加透明QWidget,相应的paintEvent才能执行,单步调试发现,如果屏蔽透明QWidget那部分代码,paintevent函数不执行,定时器再刷新,应该每1s去执行一次paintevent函数才对?
为什么?谢谢
SmartRoom::SmartRoom(QFrame *parent) :
QFrame(parent)
{
setup();
if(objectName().isEmpty())
{
setObjectName(QString::fromUtf8(UHomePageName));
}
setWindowFlags(Qt::FramelessWindowHint);
QPalette palette;
backWidget = new QWidget(this);
backWidget->setObjectName("backWidget");
//backWidget->setGeometry(QRect(0,0,SCREEN_W,SCREEN_H));
backWidget->move(0,0);
backWidget->resize(SCREEN_W,SCREEN_H);
palette.setBrush(QPalette::Background,QBrush(QPixmap("img/funmenu/blackbottom.png")));
this->setPalette(palette);
backWidget->setAutoFillBackground(true);
//为什么要添加透明QWidget,相应的paintEvent才能执行
tranWidget = new QWidget(backWidget);
tranWidget->setObjectName("tranWidget");
tranWidget->setGeometry(QRect(0,0,SCREEN_W,SCREEN_H));
palette.setBrush(QPalette::Background,QBrush(QPixmap("img/tran.png")));
backWidget->setPalette(palette);
tranWidget->setAutoFillBackground(true);
//通过定时器刷新页面占用cpu资源太高90%,准备改用QPropertyAnimation动画框架
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(update()));
timer->start(1000);
angle = 0;
}void SmartRoom::paintEvent(QPaintEvent *)
{
qDebug()<<"SmartRoom::paintEvent";
angle += 10;
if(angle>=360)
angle = 0;
QPainter painter(this);
QPixmap pix;
pix.load("img/funmenu/colorring.png");
painter.translate(SCREEN_W/2,SCREEN_H/2); //背景图片的中心作为新的原点
painter.translate(-pix.width()/2,-pix.height()/2); //左上角平移成新的原点(0,0)
painter.setRenderHint(QPainter::Antialiasing);
painter.drawPixmap(0,0,pix.width(),pix.height(),pix);
QPainter painter2(this);
QPixmap pix2;
pix2.load("img/funmenu/ring.png");
painter2.translate(SCREEN_W/2,SCREEN_H/2); //让图片的中心作为旋转的中心
painter2.rotate(-angle); //顺时针旋转90度
painter2.setRenderHint(QPainter::Antialiasing);
painter2.drawPixmap(pix.width()/2-10,0,pix2.width(),pix2.height(),pix2);
QPainter painter3(this);
QPixmap pix3;
pix3.load("img/funmenu/home.png");
painter3.translate(SCREEN_W/2,SCREEN_H/2);
painter3.translate(-pix3.width()/2,-pix3.height()/2); //左上角平移成新的原点(0,0)
painter3.setRenderHint(QPainter::Antialiasing);
painter3.drawPixmap(0,0,pix3.width(),pix3.height(),pix3);
qDebug()<<"SmartRoom::paintEvent";
}
...全文
相关推荐
QT 自己写的进度条控件 (透明窗体)
QT 自己写的进度条控件 (内有两种进度条,且窗体透明) QT4.5.3+ vc6.0 windows2003下编译通过
QT 子窗体透明源码
可以将一个子窗体设置为透明,隐藏菜单,可以任意拖动可以将一个子窗体设置为透明,隐藏菜单,可以任意拖动
QT 半透明窗口 面板 示例
做了一个浮动的半透明窗体面板,窗体背景半透明,不影响子控件透明度。可以修改窗体背景的颜色和透明度,实现了鼠标按住移动窗体,拖动边缘调整窗体大小和鼠标滚轮修改透明度,总结了使用方式并且添加了必要注释
Qt 透明窗口实现.各个Item 管理自己的透明度
透明窗口实现 本程序是在vs2010加Qt4.7.1版本上编译通过.
Qt4 右键菜单 透明Widget 实例
Qt4透明Widget实现 右键菜单实现 小程序源码.


