默认对话框

Qt默认的对话框是系统自带的样式,不同版本的windows也有些许不同,如果希望风格统一的话,这时候就需要自定义一个属于自己的对话框了

系统自带

自定义样式

新建Qt设计师类

虽然是自定义界面,但是有一个.ui文件放置按钮还是要方便些,如果是直接新建一个C++类文件就需要在代码中添加相关的控件了

新建设计师类

去除默认的样式

在构造函数中加上:

setAttribute(Qt::WA_TranslucentBackground, true);

setWindowFlags(Qt::Window | Qt::FramelessWindowHint

| Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint

| Qt::WindowMaximizeButtonHint);

就把默认的标题栏、背景等给去掉了。现在运行的话背景是透明的,除了自己加的控件外,其他啥也没有。

重写paintEvent

自己对于Dialog的界面有什么需求,可以在paintEvent函数中添加。例如,我想设置边框为圆角,在文本输入框上下各有一条分割线:

void LoginDialog::paintEvent(QPaintEvent *event)

{

QPainterPath path;

path.setFillRule(Qt::WindingFill);

QRect rect = QRect(0, 0, this->width(), this->height());

path.addRoundRect(rect,10,10);

QPainter painter(this);

painter.setRenderHint(QPainter::Antialiasing, true);

painter.fillPath(path, QBrush(Qt::white));

painter.setPen(Qt::gray);

painter.drawPath(path);

painter.drawLine(rect.left()+40, 60, rect.right()-40, 60);

painter.drawLine(rect.left()+40, rect.bottom()-70, rect.right()-40, rect.bottom()-70);

}

重写鼠标事件

由于默认的情况被我们去掉了,此时对话框是不能移动的,需要重写鼠标事件,函数声明:

void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

具体实现:

void LoginDialog::paintEvent(QPaintEvent *event)

{

QPainterPath path;

path.setFillRule(Qt::WindingFill);

QRect rect = QRect(0, 0, this->width(), this->height());

path.addRoundRect(rect,10,10);

QPainter painter(this);

painter.setRenderHint(QPainter::Antialiasing, true);

painter.fillPath(path, QBrush(Qt::white));

painter.setPen(Qt::gray);

painter.drawPath(path);

painter.drawLine(rect.left()+40, 60, rect.right()-40, 60);

painter.drawLine(rect.left()+40, rect.bottom()-70, rect.right()-40, rect.bottom()-70);

}

void LoginDialog::mousePressEvent(QMouseEvent *event)

{

if( event->button() == Qt::LeftButton){

m_Press = event->globalPos();

leftBtnClk = true;

}

event->ignore();//表示继续向下传递事件,其他的控件还可以去获取

}

void LoginDialog::mouseReleaseEvent(QMouseEvent *event)

{

if( event->button() == Qt::LeftButton ){

leftBtnClk = false;

}

event->ignore();

}

void LoginDialog::mouseMoveEvent(QMouseEvent *event)

{

if( leftBtnClk ){

m_Move = event->globalPos();

this->move( this->pos() + m_Move - m_Press );

m_Press = m_Move;

}

event->ignore();

}

添加自己的控件

之后就像是在用默认的Dialog一样,在.ui中添加需要的控件,以及需要的信号/槽函数这些了。

界面设计

除了重绘的背景之外,其他的控件都可以在ui文件里添加。附上Github链接地址。

qt android 对话框,Qt自定义Dialog相关推荐

  1. qt android 对话框,安卓使用Dialog创建普通对话框

    Activity页面简单所以XML不再写出.下面给出核心代码: button1=(Button)findViewById(R.id.button1); //为按钮设置监听器 button1.setOn ...

  2. android 自定义dialog 定时关闭,Android编程实现自定义Dialog的大小自动控制方法示例...

    本文实例讲述了Android编程实现自定义Dialog的大小自动控制方法.分享给大家供大家参考,具体如下: Android应用开发中,无论是出于功能还是增加用户体验,弹出对话框(Dialog)进行一些 ...

  3. android 中Dialog对话框及自定义Dialog的方法

    // 重写方法,让他返回Dialog.// 以下是优化代码的替换,只创建一次,每次点击使用showDialog()的方法,不用每次都创建新的,可以减少内存使用@Overrideprotected Di ...

  4. android 多个自定义dialog

    我先上效果图: 看一下activity package com.example.administrator.mydialog;import android.app.Activity; import a ...

  5. Android开发之自定义dialog的实现(源代码分享)

    使用系统自带的dialog如果不能满足我们日常开发的需求,那就得自己构建custom dialog,特别是对于一个app来说,统一的样式风格会给人一种舒服的感觉,所以dialog的样式 .色调一般都要 ...

  6. 如何让Android对话框全屏 Dialog 全屏

    如何让一个对话框全屏对话框: <style name="Theme.Application.Dialog.Alert" parent="android:Theme. ...

  7. Flutter:Dialog对话框及自定义Dialog

    基本属性介绍 几个自带的dialog用法和属性基本一致,只是部分参数不同 const AlertDialog({Key? key,this.title, //对话框标题组件this.titlePadd ...

  8. android 自定义对话框 demo,自定义dialog对话框获取EditText数据demo

    效果: java代码 package com.example.dialogdemo; import android.app.Activity; import android.app.AlertDial ...

  9. Android开发之自定义Dialog二次打开报错问题解决

    之前自定义了一个AlertDialog对话框,第一次点击时正常,但第二次调用时会出现错误:java.lang.IllegalStateException: The specified child al ...

最新文章

  1. Java项目:医院分诊挂号住院管理系统(java+SpringBoot+FreeMarker+Mysql)
  2. Odoo10 启动选项
  3. 从flink-example分析flink组件(1)WordCount batch实战及源码分析
  4. 为人示弱,做事留余 | 摸鱼系列
  5. VUE使用vue-seamless-scroll自动滚动表格数据,对表格数据排序无效的解决办法
  6. (26)FPGA面试技能提升篇(DDC、DUC、QMC)
  7. Unity3d Awake、OnEnable、Start生命周期
  8. sublime3定制化为python3编辑利器。
  9. 从头开始学JavaScript (四)——操作符
  10. ipmi java sdk,IPMI Library for Java
  11. 关于大型网站技术演进的思考(十四)--网站静态化处理—前后端分离—上(6)...
  12. mvc 怎么把后台拼接好的div写到前台_PR:被写黑稿了怎么办?
  13. 自主创新生态圈再扩大,深度科技与金格科技完成产品兼容性认证
  14. python颜色对照表及颜色搭配
  15. 2018主流服务器cpu,【热门服务器CPU排行榜】2021热门服务器CPU排名_热门服务器CPU排行榜10强-太平洋产品报价...
  16. android显示视频预览
  17. Vim 编辑器及其基本操作
  18. html5内嵌式格式,如何使用内嵌式引入css样式表
  19. winhex可以编程c语言吗,[转载]对winhex API编程!
  20. 第7组 团队展示(组长)

热门文章

  1. Django 1.6 部署
  2. oracle 调优3
  3. 教你如何让电脑的ADSL宽带连接开机自动拨号
  4. 将 Web 项目从 Visual Studio .Net 2002/2003 转换到 Visual Studio 2005 的分步指南
  5. [阿里云Java Web环境搭建]二、Ubuntu安装JDK
  6. SQL Server 分布式数据库的问题和解决方法
  7. iOS 通过Jenkins 自动构建ipa
  8. 精选CSDN的ACM-ICPC五星博客
  9. 5分钟了解Mockito
  10. VirtualBox中修改Ubuntu-server分辨率