Qt设置窗体透明
一、前言
在音频开发中,窗体多半为半透明、圆角窗体,如下为Qt 5.5 VS2013实现半透明方法总结。
二、半透明方法设置
1、窗体及子控件都设置为半透明
1)setWindowOpacity(0.8);//参数范围为0-1.0,通过QSlider控件做成透明度控制条
2)无边框设置 setWindowFlags(Qt::FramelessWindowHint);
3)窗体圆角设置 setAttribute(Qt::WA_TranslucentBackground); 通过paintEvent绘制窗体背景色与圆角 void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; painter.setBrush(QBrush(QColor("#616F76"))); //窗体背景色 painter.setPen(Qt::transparent); QRect rect = this->rect(); //rect为绘制大小 rect.setWidth(rect.width() - 1); rect.setHeight(rect.height() - 1); painter.drawRoundedRect(rect, 15, 15); //15为圆角角度 //也可用QPainterPath 绘制代替 painter.drawRoundedRect(rect, 15, 15); //QPainterPath painterPath; //painterPath.addRoundedRect(rect, 15, 15);//15为圆角角度 //painter.drawPath(painterPath); QWidget::paintEvent(event); }
2、通过图片贴图,设置局部透明
1)窗体设置 setAttribute(Qt::WA_TranslucentBackground);//背景半透明属性设置 setWindowFlags(Qt::FramelessWindowHint);//无边框窗体设置
2)采用样式加载图片 ui->m_BgWidget->setStyleSheet("background-image:url(:/images/bg.png);"); 注意:m_BgWidget为窗体对象的子窗体,不能直接设置QWidget
3)效果图如下(录制gif时刷新有点延时)
3、通过paintEvent重绘背景色透明度
1)窗体属性设置 setAttribute(Qt::WA_TranslucentBackground);//背景半透明属性设置 setWindowFlags(Qt::FramelessWindowHint);//无边框窗体设置 m_BgColor = QColor("#616F76");//默认背景色 m_BgColor.setAlphaF(0.8); this->setContextMenuPolicy(Qt::CustomContextMenu); connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(showContextMenuSlot(const QPoint &)));//右击出现菜单
2)右击出现菜单 void Widget::showContextMenuSlot(const QPoint &pos) { QAction *act = NULL; if(NULL == m_Menu) { m_Menu = new QMenu();//菜单 m_Actions.clear();//记录所有Action act = m_Menu->addAction("1.0", this, SLOT(funcSlot())); m_Actions << act; act->setCheckable(true); act = m_Menu->addAction("0.8", this, SLOT(funcSlot())); m_Actions << act; act->setCheckable(true); //设置可选中 act->setChecked(true); //设置被选中 act = m_Menu->addAction("0.5", this, SLOT(funcSlot())); m_Actions << act; act->setCheckable(true); act = m_Menu->addAction("0.3", this, SLOT(funcSlot())); m_Actions << act; act->setCheckable(true); act = m_Menu->addAction("0.1", this, SLOT(funcSlot())); m_Actions << act; act->setCheckable(true); } m_Menu->exec(mapToGlobal(pos));//弹出菜单 } 3)选择菜单Action,修改背景颜色透明度 void Widget::funcSlot() { QAction *act = qobject_cast(sender());//获取选中的Action if(act) { double alpha = act->text().toDouble(); m_BgColor.setAlphaF(alpha);//背景色透明度修改 foreach(QAction *action, m_Actions)//去除其余选中,互斥 { if(act != action) action->setChecked(false); } this->update();//刷新界面 } }
4)通过paintEvent重绘背景色 void Widget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 反锯齿; painter.setBrush(QBrush(m_BgColor));//修改后的背景色 painter.setPen(Qt::transparent); QRect rect = this->rect(); //rect为绘制窗体大小 rect.setWidth(rect.width() - 1); rect.setHeight(rect.height() - 1); painter.drawRoundedRect(rect, 15, 15);//15为圆角角度 //也可用QPainterPath 绘制代替 painter.drawRoundedRect(rect, 15, 15); //QPainterPath painterPath; //painterPath.addRoundedRect(rect, 15, 15); //painter.drawPath(painterPath); QWidget::paintEvent(event); }
5)效果如下(录频有点重影)
4、通过paintEvent采用Clear模式绘图,实现局部透明
1)窗体属性设置 m_Margin = 60;//各个绘制图形与边框的距离 m_BgColor = QColor("#00BFFF");//窗体背景色 installEventFilter(this);//事件过滤器,用于鼠标按下后界面移动 setWindowFlags(Qt::FramelessWindowHint);//无边框窗体设置 setAttribute(Qt::WA_TranslucentBackground);//背景半透明属性设置
2)画笔属性设置 void Widget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setPen(Qt::NoPen); painter.setBrush(m_BgColor); painter.drawRoundedRect(this->rect(), 15, 15);//设置整体窗体圆角为15° painter.setCompositionMode(QPainter::CompositionMode_Clear);//设置Clear绘图模式 //绘制三角形 drawTriangle(&painter); //绘制圆 drawCircular(&painter); //绘制矩形 drawRectangle(&painter); }
3)绘制三角形 void Widget::drawTriangle(QPainter *painter) { QPainterPath path; int width = this->width() / 2; int height = this->height() / 2; //顶点 int topX = width / 2; int topY = m_Margin; //左下顶点 int leftX = m_Margin; int leftY = height - m_Margin; //右下顶点 int rightX = width - m_Margin; int rightY = height - m_Margin; path.moveTo(topX, topY);//起点 path.lineTo(leftX, leftY);//画线段1 path.lineTo(rightX, rightY);//画线段2 path.lineTo(topX, topY);//画线段3 painter->fillPath(path, QBrush(m_BgColor));//绘制三角形 }
4)绘制圆 void Widget::drawCircular(QPainter *painter) { int width = this->width() / 2; int height = this->height() / 2; int x = width + width / 2;//X向坐标 int y = height / 2; //Y向坐标 int r = width / 2 - m_Margin; //第一个参数为中心点,r为x向、y向长度(不一致时可绘制椭圆) painter->drawEllipse(QPoint(x, y), r, r); }
5)绘制矩形 void Widget::drawRectangle(QPainter *painter) { int width = this->width() / 2; int height = this->height() / 2; int rectWidth = width - 2 * m_Margin;//矩形宽度 int rectHeight = height - 2 * m_Margin;//矩形高度 int rectX = width - rectWidth / 2;//矩形X向长度 int rectY = height + m_Margin;//矩形Y向长度 painter->drawRect(QRect(rectX, rectY, rectWidth, rectHeight)); }
6)运行效果
鲁迅一段话引人深思父母存在的意义不是给予鲁迅一段话引人深思父母存在的意义不是给予孩子舒适和富裕的生活,而是当你想到你的父母时,你的内心就会充满力量,会感受到温暖,从而拥有克服困难的勇气和能力,因此获得人生真正的乐趣和自由
北电导演被曝性骚扰!不让女生穿内衣裤,强行搂抱涉及200多人近日,北电20导演赵韦弦因骚扰多名女生的丑闻,冲上热搜。根据一个名叫我不会放过任何人的网友控诉。赵韦弦以让对方帮忙拍摄导演系作业为缘由,诱骗逼迫了多位女同学到一间屋子内,拍摄暴露的
德甲最新积分榜拜仁4轮不胜跌至第4,多特蒙德赢德比成功登顶今天晚上,德甲联赛第7轮全面开打,拜仁客场01输给奥格斯堡,爆出了大冷门,遭到4轮不胜,跌到了联赛第4位多特蒙德主场10击败沙尔克04,成功登顶,罗伊斯受伤下场,17岁的穆科科头球
勿忘国耻九一八事变九一八事变又称柳条湖事件,是1931年9月18日,日本驻中国东北地区的关东军突然袭击沈阳以武力侵占东北事件。1931年9月18日夜晚,盘踞在中国东北的关东军精心策划了,炸毁沈阳柳条
21!英超奇迹,22岁球星刷新纪录,身价或将超内少,曼联很意外导读足坛中,人们往往会用身价,衡量一名球员的天赋实力等属性,就像姆巴佩哈兰德,二人的身价远远超过1亿欧元,这就是专门的评级机构对他们的重度认可。总体而言,球员想要提升身价,需要有更
东北铁三角高秀敏与有妇之夫同居14年,至死没和赵本山和解说起春晚,大家就一定会联想到赵本山。虽然本山大叔已经9年未登春晚了,但他的传说一直都在,至今也没有谁可以超越。15次中央春节联欢晚会一等奖,这是观众颁给赵本山的奖牌。不多,但是足够
9月1日版本更新,狄仁杰宫本适当降温,赵云扁鹊喜提加强大家好,新的9月已经开始了,在这一天王者荣耀官方也对版本进行了一次小更新。主要是加入了一些9月的活动还有对一些英雄进行了部分调整,那就一起来看看吧,避免对局中因为不了解英雄的调整而
应用科技学院各专业在王者荣耀里可以是哪个英雄应用科技学院各专业在王者荣耀里可以是哪个英雄电子商务张良张良作为汉初杰出的谋士,智商当然不是盖的,电商作为理工类中数一数二的专业,自然配得起这个英雄了。团战输了?重启试试new一个
柳爷打野掉进浅浅的坑柳爷直线突击释放二技能,对方立马闪退蹲草的妲己正准备三技能连放秒杀反野小倩倩在一旁吟响了将进酒小倩倩是男人们对一个女诗人的爱称据说她的诗能让男人的肾上腺素极速飙升她的爸爸还挺有成就
你以为你在玩游戏?其实是算法在玩你图片来源视觉中国文智商税研究中心每当你想放弃一个手机游戏的时候,它都会非常精准的给你一点甜头,让你继续玩下去。算法,现在已经无处不在,除了短视频和电商行业普遍在用算法与用户交流之外
穿越到古代,你会选择做什么职业?如果说让你穿越到一个古代的江湖里面,你会选择通过什么样的职业生活?都知道在古代的那一些职业跟现在的日常职业有着天差地别的差距。虽然有一句话叫做三百六十行行行出状元,但是想要在古代生
长篇小说山水咸宁(第二稿)第三十二章张培忠爱长安李建平和黄静恋爱不到一个月,好得已经不能再好了。每个星期六,李建平从西京体育学院赶回高家庄,不着急回家,先和黄静在高家庄小学见面,出双入对形影不离,天黑了还黏在一起难分
张凌先藏石拓片欣赏冰刀鞋舞乐4590cm拳勇36150cm翼龙33160cm兽斗斗兽42294cm局部一局部二局部三虎40115cm虎40115cm羽人饲龙50150cm建鼓舞41124cm建鼓舞乐
新刊速览运动认知神经科学是运用运动认知神经科学技术,探讨运动改善大脑认知功能的多学科交叉领域。随着神经科学的发展,神经科学技术手段已经渗透到医学生物学社会学教育学心理学等多个领域,与其他学
我和小玖的故事(1)题记我有四颗智齿,虽然只疼过一回,但是那个疼痛真的是没齿难忘。而且,每次体检,医生总是建议拔掉,嗯,四颗。其实,去拔牙的决心已经下很久了,但据说拔掉智齿,有些记忆也会随之失去,因此
幸福到万家亚妮和林桂芝的婆媳较量,虽然获胜,却藏着更大隐患哥哥王庆来和嫂子何幸福因避祸,而不得不到城里投奔庆志。庆志原本平淡的生活瞬间变成了两面胶的状态,一面是倾尽所有支持自己买房的兄嫂,一面是不计较利益得失专心备婚的未婚妻亚妮。虽然哥哥
稀奇稀奇真稀奇,三胞胎兄弟高考674664654分考同一所大学学霸版TFBOYS三胞胎兄弟同时考入衡阳市八中这是中国衡阳新闻网衡阳新闻2019年9月2日的报道。报道说在衡阳市八中开学的日子里迎来了一对三胞胎大哥赵振兴二哥赵振中三弟赵振华,这三
态度变了!澳大利亚承认美国失败,德国直言更想与中国合作G7和北约峰会说是西方国家商议如何更好的发展经济,其实是美国在给西方发布任务,任务的目标就是针对中国制定一系列干扰计划,阻止中国经济发展。关于这次会议的内容,美国方面已经给出了回应
外媒美国16家星巴克门店因安全问题将永久关闭据美国华尔街日报消息,美国星巴克公司11日宣布,它将永久关闭16家门店,其中包括星巴克总部所在地西雅图的多家门店,因为有员工举报这些门店曾发生吸毒和其它涉嫌犯罪的活动。星巴克公司美
中国队半场领先韩国队2分的三个细节文水清清北京时间7月12日,中国队与韩国队的亚洲杯比赛半场战罢,球队4543暂时领先,周琦王哲林沈梓捷郭艾伦和赵继伟等几位主力缺阵,球队一度3137落后6分,半场仍然能够实现反超,
旧衣回收是公益还是生意?旧衣回收是公益还是生意?202207120803环球网来源法治日报记者调查旧衣回收去向调查动机每到搬家换季等时节,不少居民家中就会淘汰一批不穿的旧衣服。对于许多想要断舍离的居民来说
奋进新征程建功新时代大美边疆雪山藏寨宜居宜游走进西藏日喀则市康马县少岗乡朗巴村,村口幼儿园里的孩子们在嬉闹玩耍,村党群活动中心内,10多名村民正随着欢快的音乐翩翩起舞,农田里,青稞如绿毯般铺展,烟雨中的村庄处处充满生机。我们