您的位置:首页 > 健康 > 美食 > 济宁优化公司_免费推广软件流量精灵_十大搜索引擎排行榜_优秀网页设计作品

济宁优化公司_免费推广软件流量精灵_十大搜索引擎排行榜_优秀网页设计作品

2025/3/18 0:08:14 来源:https://blog.csdn.net/yang_quan_yang/article/details/146226386  浏览:    关键词:济宁优化公司_免费推广软件流量精灵_十大搜索引擎排行榜_优秀网页设计作品
济宁优化公司_免费推广软件流量精灵_十大搜索引擎排行榜_优秀网页设计作品

一、前言

  在音频开发中,窗体多半为半透明、圆角窗体,如下为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)效果图如下

  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();//记录所有Actionact = 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<QAction *>(sender());//获取选中的Actionif(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);//画线段1path.lineTo(rightX, rightY);//画线段2path.lineTo(topX, topY);//画线段3painter->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));}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com