Qt 實現遮罩效果彈框


思路:底層畫一個透明的遮罩矩形,中間放置一些控件。

 

步驟: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()); //窗口移動

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM