源地址:http://blog.csdn.net/attilax/article/details/12343625

paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制

效果图:

作者Attilax ,  EMAIL:1466519819@qq.com 
来源:attilax的专栏
地址:http://blog.csdn.net/attilax

第一步:去掉系统默认标题栏 1

第2步:添加自定义标题栏以及最小化,最大化.关闭按钮...还有左边的窗体小图标.. 2

第3步:添加标题栏拖曳事件.. 2

第4步: 最大化,最小化,  .关闭按钮事件: 3

5窗体图标点击事件.. 4

6标题栏右击菜单事件 4

7标题栏双击事件 4

8边框拖曳更改大小事件 (待续) 4

9绘制自定义边框 (待续) 4

第一步:去掉系统默认标题栏

////////////////////////////////////////////////////////////////

构造函数里添加以下代码.

setWindowFlags( Qt::FramelessWindowHint|  Qt::WindowSystemMenuHint

| Qt::WindowMinimizeButtonHint);

Qt::FramelessWindowHint指明孪不要系统标题栏以及边框..当然附加在他们上面的事件也就没兰,需要重写..

Qt::WindowSystemMenuHint 指明可以在任务栏点击事件以及右键菜单.. 这个要有..

Qt::WindowMinimizeButtonHint   指明可以最小化,最大化.

第2步:添加自定义标题栏以及最小化,最大化.关闭按钮...还有左边的窗体小图标..

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

标题栏背景图片png格式一张..使用photoshop处理一下,我使用的是7.0 绿化版...14M..很不错..高度32pix

最小化,最大化.关闭按钮图片需要..还需要对应的激活状态图片,压下状态图片,共9张..大小32像素..

左边的窗体小图标一张..32像素..

添加标题栏,我是使用lable控件实现的..添加上K,设置个背景走ok兰..

最小化,最大化.关闭按钮,左边的窗体小图标,全部使用QPushButton,设置好mask,以及背景,请参考不规则按钮设置的方法..

使用qss设置好最小化,最大化.关闭按钮的激活状态,press状态下的图片切换..

第3步:添加标题栏拖曳事件..

////////////////////////////////////////////////

为了简单的,我直接使用了悬浮窗的拖曳技术.袖管拖曳窗体哪里都可以拖曳..

void IrregularWidget::mousePressEvent(QMouseEvent *event)

{

//按住左键可以托动窗口,按下右键关闭程序

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

{

m_CurrentPos = event->globalPos() - frameGeometry().topLeft();

qDebug()<<"---mouse left ---";

event->accept();

}

}

void IrregularWidget::mouseMoveEvent(QMouseEvent *event)

{

//resize window

/*    if (event->buttons() && Qt::LeftButton)

{}

else   */

if (event->buttons() && Qt::LeftButton)

{

move(event->globalPos() - m_CurrentPos);

event->accept();

}

}

第4步: 最大化,最小化,  .关闭按钮事件:

////////////////////////////////////////////////////////////

//close

void MainWindowList::on_pushButton_5_clicked()

{

close();

}

//max

void MainWindowList::on_pushButton_6_clicked()

{

//最大化

if(this->isMaximized())

this->showNormal();   //恢复

else

showMaximized();

}

//最小化窗口函数

void MainWindowList::on_pushButton_7_clicked()

{

//系统自定义的最小化窗口函数

showMinimized();

}

5窗体图标点击事件..

6标题栏右击菜单事件

7标题栏双击事件

8边框拖曳更改大小事件 (待续)

9绘制自定义边框 (待续)

paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制的更多相关文章

  1. paip.提升用户体验---c++ qt 取消gcc编译的警告信息.txt

    paip.提升用户体验---c++ qt 取消gcc编译的警告信息.txt 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http:// ...

  2. paip.提升用户体验----gcc c++ JIT-debugging 技术

    paip.提升用户体验----gcc  c++ JIT-debugging 技术 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http ...

  3. paip.提升用户体验-----c++ gcc 命令在notepad++扩展中的配置..

    paip.提升用户体验-----c++ gcc 命令在notepad++扩展中的配置.. 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址: ...

  4. paip.提升用户体验--radio图片选择器 easyui 实现..

    #paip.提升用户体验--radio图片选择器 easyui 实现.. =================================== ##原因... ------------------- ...

  5. paip.提升用户体验--提升java的热部署热更新能力

    paip.提升用户体验--提升java的热部署热更新能力 想让java做到php那么好的热部署能力  "fix online"/在线修复吗??直接在服务器上修改源码生效,无需重启应 ...

  6. paip.提升用户体验---论文本编辑器的色彩方案

    paip.提升用户体验---论文本编辑器的色彩方案 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.ne ...

  7. 【译】如何使用Vue过渡效果来提升用户体验

    在Vue应用中添加过渡效果是一个可以使你的项目感觉更专业的简单方法.通过提升用户体验,可以使你的网站留住更多的用户以及提高转化率. 只需要简单的处理就可以获得巨大的回报,何乐而不为? 在这个指南中,我 ...

  8. Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率..

    Atitit.hybrid混合型应用 浏览器插件,控件的实现方式 浏览器运行本地程序的解决方案大的总结---提升用户体验and开发效率.. 1. hybrid App 1 1.1. Hybrid Ap ...

  9. 使用渐进式JPEG来提升用户体验

    今天才认识到原来JPEG文件有两种保存方式他们分别是Baseline JPEG(标准型)和Progressive JPEG(渐进式).两种格式有相同尺寸以及图像数据,他们的扩展名也是相同的,唯一的区别 ...

随机推荐

  1. poj 2363 Blocks(暴力)

    题目链接:http://poj.org/problem?id=2363 思路分析:由于数据较小,采用暴力搜索法.假设对于矩形边长 1 <= a <= b <= c <= N; ...

  2. Java chapter04-1

    public class CPU { int speed; //获得speed的值 public void setSpeed(int m){ speed = m; } //返回speed的值 publ ...

  3. 如何使用W5300实现ADSL连接(一)

    在介绍W5300连接ADSL之前,先给大家简单介绍一下WIZnet W5300这款芯片. W5300是WIZnet公司的一款单芯片器件,采用0.18μmCMOS工艺,内部集成10/100M以太网控制器 ...

  4. APUE学习笔记——10.15 sigsetjmp和siglongjmp

    转载自:sigsetjmp使用方法 如侵犯您的权益,请联系:windeal12@qq.com sigsetjmp使用方法 分类: c/c++ linux2012-02-03 12:33 1252人阅读 ...

  5. 【JavaScript】标签样式中多出了element.style

    是因为使用了js增加或修改了样式.

  6. Tomcat日志catalina.out文件过大的处理方法

    原文地址:http://lcbk.net/tomcat/1396.html 我们知道一般企业使用Tomcat 作为Web端时,它产生的日志会越来越大,特别是catalina.out这个日志文件,然而有 ...

  7. 引用 U-boot给kernel传参数和kernel读取参数—struct tag

    引用 清风徐徐 的 U-boot给kernel传参数和kernel读取参数—struct tag U-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb等.而Linux ...

  8. 从陌陌上市看BAT的移动保卫战(转)

    12 月 11 日,陌陌正式登陆纳斯达克,这件事除了证明了移动互联网“没有什么不可能之外”,对 BAT 而言,更大的意义在于需要时刻警惕还有没有其它细分领域的公司能够在自己核心业务领域溜出来. 两年前 ...

  9. Linux下VNC的安装和开机启动

    1.确认VNC是否安装默认情况下,Red Hat Enterprise Linux安装程序会将VNC服务安装在系统上.确认是否已经安装VNC服务及查看安装的VNC版本[root@testdb ~]# ...

  10. 分享:json2.js源代码解读笔记

    1. 怎样理解"json" 首先应该意识到,json是一种数据转换格式,既然是个"格式",就是个抽象的东西.它不是js对象,也不是字符串,它仅仅是一种格式,一种 ...