为什么要增加一个透明背景才能执行paintevent函数?

蜗牛哦 蜗牛哦 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
先贴代码,
只要窗体发送变化,或者是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";

}
...全文
评论 2
收藏 已收藏
分享
返回顶部
蜗牛哦
Qt 21,503 成员 26,693 内容