qt android 对话框,Qt自定义Dialog
默认对话框
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相关推荐
- qt android 对话框,安卓使用Dialog创建普通对话框
Activity页面简单所以XML不再写出.下面给出核心代码: button1=(Button)findViewById(R.id.button1); //为按钮设置监听器 button1.setOn ...
- android 自定义dialog 定时关闭,Android编程实现自定义Dialog的大小自动控制方法示例...
本文实例讲述了Android编程实现自定义Dialog的大小自动控制方法.分享给大家供大家参考,具体如下: Android应用开发中,无论是出于功能还是增加用户体验,弹出对话框(Dialog)进行一些 ...
- android 中Dialog对话框及自定义Dialog的方法
// 重写方法,让他返回Dialog.// 以下是优化代码的替换,只创建一次,每次点击使用showDialog()的方法,不用每次都创建新的,可以减少内存使用@Overrideprotected Di ...
- android 多个自定义dialog
我先上效果图: 看一下activity package com.example.administrator.mydialog;import android.app.Activity; import a ...
- Android开发之自定义dialog的实现(源代码分享)
使用系统自带的dialog如果不能满足我们日常开发的需求,那就得自己构建custom dialog,特别是对于一个app来说,统一的样式风格会给人一种舒服的感觉,所以dialog的样式 .色调一般都要 ...
- 如何让Android对话框全屏 Dialog 全屏
如何让一个对话框全屏对话框: <style name="Theme.Application.Dialog.Alert" parent="android:Theme. ...
- Flutter:Dialog对话框及自定义Dialog
基本属性介绍 几个自带的dialog用法和属性基本一致,只是部分参数不同 const AlertDialog({Key? key,this.title, //对话框标题组件this.titlePadd ...
- android 自定义对话框 demo,自定义dialog对话框获取EditText数据demo
效果: java代码 package com.example.dialogdemo; import android.app.Activity; import android.app.AlertDial ...
- Android开发之自定义Dialog二次打开报错问题解决
之前自定义了一个AlertDialog对话框,第一次点击时正常,但第二次调用时会出现错误:java.lang.IllegalStateException: The specified child al ...
最新文章
- Java项目:医院分诊挂号住院管理系统(java+SpringBoot+FreeMarker+Mysql)
- Odoo10 启动选项
- 从flink-example分析flink组件(1)WordCount batch实战及源码分析
- 为人示弱,做事留余 | 摸鱼系列
- VUE使用vue-seamless-scroll自动滚动表格数据,对表格数据排序无效的解决办法
- (26)FPGA面试技能提升篇(DDC、DUC、QMC)
- Unity3d Awake、OnEnable、Start生命周期
- sublime3定制化为python3编辑利器。
- 从头开始学JavaScript (四)——操作符
- ipmi java sdk,IPMI Library for Java
- 关于大型网站技术演进的思考(十四)--网站静态化处理—前后端分离—上(6)...
- mvc 怎么把后台拼接好的div写到前台_PR:被写黑稿了怎么办?
- 自主创新生态圈再扩大,深度科技与金格科技完成产品兼容性认证
- python颜色对照表及颜色搭配
- 2018主流服务器cpu,【热门服务器CPU排行榜】2021热门服务器CPU排名_热门服务器CPU排行榜10强-太平洋产品报价...
- android显示视频预览
- Vim 编辑器及其基本操作
- html5内嵌式格式,如何使用内嵌式引入css样式表
- winhex可以编程c语言吗,[转载]对winhex API编程!
- 第7组 团队展示(组长)