当前位置:首页 > 编程笔记 > 正文
已解决

QDialog实现圆角对话框的三种方式

来自网友在路上 182882提问 提问时间:2023-11-01 22:23:49阅读次数: 82

最佳答案 问答题库828位专家为你答疑解惑

方式一:通过QBitMap设置控件有效绘制区域(缺点:容易产生锯齿,锯齿来自于QBitMap)

  1. Dialog继承Qdialog
  2. 设置无边框及背景透明
    this->setWindowFlags(Qt::FramelessWindowHint); //去除标题边框
    this->setAttribute(Qt::WA_TranslucentBackground);//背景透明
    
  3. 重写paintEvent
    void Dialog::paintEvent(QPaintEvent *event)
    {//1. 绘制样式(qss),例如qss中有背景色最后出来的dialog也是对应背景颜色QStyleOption opt;opt.initFrom(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//绘制样式//2. 设置掩码,约定painter绘制区域QBitmap bmp(this->size());bmp.fill();//fill(const QColor &fillColor = Qt::white);QPainter painter(&bmp);//painter.setRenderHint(QPainter::Antialiasing, true);//解决绘图有锯齿,此方式针对掩码的bitmap无效painter.setPen(Qt::NoPen);painter.setBrush(Qt::black);//掩码值painter.drawRoundedRect(bmp.rect(), 36, 36);//在bitmap中绘制圆角矩形setMask(bmp);//设置矩形掩码以确定本控件可绘制区域QDialog::paintEvent(event);
    }
    

参考链接:https://blog.csdn.net/ajcjldd/article/details/127306630

方式二:QPainter直接绘制圆角矩形(缺点:无法使用qss方式配置背景色,需要根据主题切换brush颜色)

  1. 同上

  2. 同上

  3. 重写paintEvent

    void Dialog::paintEvent(QPaintEvent *event)
    {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing); // 设置抗锯齿,不然边框会有明显锯齿painter.setPen(Qt::NoPen);painter.setBrush(Qt::white);                   // 设置窗体颜色QRect rect = this->rect();painter.drawRoundedRect(rect, 36, 36);
    }
    

参考链接:https://zhuanlan.zhihu.com/p/513853572

方式三:QDialog中内嵌QFrame,并使用qss设置QFrame对应圆角(缺点:完美)

  1. 同上

  2. 同上

  3. Dialog内嵌QFrame,与Dialog同尺寸

    void Dialog::setupUi()
    {this->setWindowModality(Qt::ApplicationModal);this->setFixedSize(QSize(WIDTH, HEIGHT));this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明this->setWindowFlags(Qt::FramelessWindowHint); //去除标题框//back widgetphotoGroupImportFrame = new QFrame(this);photoGroupImportFrame->setObjectName("Frame");photoGroupImportFrame->setFixedSize(this->size());photoGroupImportFrame->setLayout(mainLayout);
    }
    
  4. 设置qss

    QFrame#Frame{background: #333333;border-radius: 16px 16px 16px 16px;
    }
    

参考链接:网上比较多,搜下

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"QDialog实现圆角对话框的三种方式":http://eshow365.cn/6-29660-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!