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

这篇具有很好参考价值的文章主要介绍了QDialog实现圆角对话框的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方式一:通过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 widget
        frame = new QFrame(this);
        frame->setObjectName("Frame");
        frame->setFixedSize(this->size());
        frame->setLayout(mainLayout);
    }
    
  4. 设置qss

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

参考链接:网上比较多,搜下文章来源地址https://www.toymoban.com/news/detail-738106.html

到了这里,关于QDialog实现圆角对话框的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式Qt 对话框及其类型 QDialog

    对话框是与用户进行简短交互的顶层窗口。 QDialog是Qt中所有对话框窗口的基类。 QDialog继承与QWidfet是一种容器类型的组件。  QDialog的意义: QDialog作为一种专业的交互窗口而存在。 QDialog不能作为子部部件嵌入其他容器中。 QDialog是定制了窗口式样的特殊的QWidget。 模态对话框

    2024年04月11日
    浏览(30)
  • Qt应用开发(基础篇)——对话框窗口 QDialog

            QDialog 类继承于QWidget,是Qt基于对话框窗口(消息窗口 QMessageBox 、颜色选择窗口 QColorDialog 、文件选择窗口 QFileDialog 等)的基类。           QDialog 窗口是顶级的窗口,一般情况下,用来当做用户短期任务(确认、输入、选择)或者和用户交流(提示、错误、警告、进

    2024年02月10日
    浏览(32)
  • 【pyqt5界面化工具开发-8】窗口开发-QDialog对话框

    目录 一、调用父类的菜单 二、添加更多的布局在对话框内 和前面Qwedget一样的结构(不做过多介绍) 可以参考代码中的注释 这和前面讲的Qwedget窗口布局基本上一样了 运行结果:

    2024年02月11日
    浏览(35)
  • vue:聊天对话框的实现

    实现效果:不知道怎么录屏 就用图片展示了,实现了聊天框的基础功能,也有一些细节考虑不完全。未输入消息时可发送图片或视频,输入消息后显示发送按钮,保持滚动条在位于底部的最新消息。  实现方式: 1.布局:使用了弹性布局,flex-direction: row-reverse;flex-direction

    2023年04月08日
    浏览(25)
  • 小程序对话框的实现方式

    在微信小程序中,有以下几种方式可以实现对话框(Dialog)的展示: 1. wx.showModal :wx.showModal 是微信小程序提供的一个API,用于显示模态对话框。模态对话框是一种阻塞式的对话框,需要用户进行交互后才能关闭。可以通过调用 wx.showModal 方法来显示对话框,并设置标题、内

    2024年02月12日
    浏览(68)
  • 小程序对话框的几种实现方式

    在微信小程序中,有以下几种方式可以实现对话框(Dialog)的展示: 1. wx.showModal :wx.showModal 是微信小程序提供的一个API,用于显示模态对话框。模态对话框是一种阻塞式的对话框,需要用户进行交互后才能关闭。可以通过调用 wx.showModal 方法来显示对话框,并设置标题、内

    2024年02月10日
    浏览(34)
  • 【小程序】如何实现从底部弹出对话框

    前面两篇两篇文章介绍了如何在小程序中实现上下滑动效果以及如何用 Canvas 绘制一张图片,这一篇作为前两篇的延续,介绍 如何从底部弹出一个对话框 。 相比而言,底部弹出对话框的功能比较通用,因此非常适合定义成组件(component)。 先来看一下最终实现效果: 首先是

    2024年02月07日
    浏览(29)
  • element-ui实现一个动态布局的对话框

     我把组件上传到npm了,具体使用方法请看:https://gitee.com/zengyanfang/tablelist-way/blob/master/README.md#%E5%8F%82%E6%95%B0 前言:在工作中有各种各样的对话框,最多就是填写信息这些的,一般这样的内容都是el-input输入框,el-select选择框等等之内的,这时我们就可以封装成一个组件,想

    2024年02月01日
    浏览(35)
  • 【windows编程之对话框】对话框原理,对话框的创建

    在本章节中我们来讲解Windows/Win32编程中对话框的原理和对话框的创建,我们在前几篇章节中讲解到了普通窗口中回调函数的处理,在普通窗口的窗口消息处理函数(回调函数)中,系统会首先调用我们自己写的回调函数,我们自己编写的回调函数没有处理的消息,才会交给系

    2024年02月03日
    浏览(66)
  • vue+elementui实现鼠标触及当前页面右边缘,右侧弹出新的对话框

    目前项目中需要自定义大屏,但是大屏右侧显示矩形对话框有一点突兀,所以做成鼠标靠近页面右侧边缘的时候对话框弹出,点击对话框上的回缩按钮后,对话框隐藏。 效果如图所示 对话框使用 elemetui 自带的 el-drawer ,设置其是否展示参数初始化为 false 在最外层的div标签添

    2024年02月02日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包