首页 > 其他 > 详细

Qt 实现遮罩效果弹框

时间:2021-05-08 16:39:26      阅读:15      评论:0      收藏:0      [点我收藏+]

思路:1.设置窗口背景透明属性

      2.重写paintEvent函数,遮罩背景就是画一个弹框大小的矩形,并设置颜色和透明度

      3.然后在遮罩框上添加其他的控件

ExitWidget::ExitWidget(QWidget* parent)
    : QWidget(parent)
{
    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
    setAttribute(Qt::WA_TranslucentBackground);
}


void ExitWidget::paintEvent(QPaintEvent* event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);   //反走样
    painter.setClipping(true);

  //遮罩 painter.setPen(Qt::NoPen); painter.setBrush(QColor(
0, 0, 0, 120)); painter.drawRect(rect());
  //窗口外框 QRect rectButtom((width()
- Width) / 2, (height() - Height) / 2, Width, Height); painter.setPen(Qt::NoPen); painter.setBrush(QColor(255, 255, 255, 120)); painter.drawRoundedRect(rectButtom, border, border); //画圆角矩形 QPixmap pix; pix.load(":/act/exit/MaskGroup.png"); //添加图片(从而形成了【不规则窗体】) pix = pix.scaled(413, 203); painter.drawPixmap((width() - pix.width()) / 2, rectButtom.y() - 120, pix);int spacing = (Width - m_pCancelButton->width() * 2) / 3; m_pCancelButton->move(rectButtom.x() + spacing, m_pTipLabel->y() + m_pTipLabel->height() + 20); m_pOkButton->move(m_pCancelButton->x() + m_pCancelButton->width() + spacing, m_pCancelButton->y()); }

//设置该窗口的位置(注意:当父窗口大小改变、移动、最小化后恢复都得设置位置)
QPoint globalPos = this->mapToGlobal(QPoint(0, 0)); //父窗口绝对坐标
m_pExitWidget->move(globalPos.x(), globalPos.y()); //窗口移动

 

Qt 实现遮罩效果弹框

原文:https://www.cnblogs.com/tingtaishou/p/14744482.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!