源地址: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. JS判断只能是数字和小数点

    JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...

  2. Linux chmod命令具体解释

    仅仅能文件属主或特权用户才干使用该功能来改变文件存取模式.mode能够是数字形式或以who opcode permission形式表示. who是可选的,默认是a(全部用户). 仅仅能选择一个opco ...

  3. C#_会员管理系统:开发四(日志查看)

    新建一个日志查看窗体: 日志需要的登录时间和登录状态信息由用户刚登录程序时就提供,所以在登录窗体(VIPLogin.cs)中添加代码: //定义一个全局变量 Uid; //用于获取登录成功后的用户名 ...

  4. BestCoder Round #50 (div.1) 1003 The mook jong (HDU OJ 5366) 规律递推

    题目:Click here 题意:bestcoder 上面有中文题目 分析:令f[i]为最后一个木人桩摆放在i位置的方案,令s[i]为f[i]的前缀和.很容易就能想到f[i]=s[i-3]+1,s[i ...

  5. linux中/etc与/var目录,各是什么意思?这两个目录下的文件有什么特点?

    http://zhidao.baidu.com/link?url=DkxU9CyhJb_dIUAPCmPmxRtQsENgCzqy5qnLPEj_V9DqNzdt6Qya0U5iCVRCYFkgoRo ...

  6. week4_motion_of_ball_1(小球运动)——最基本

    # Ball motion with an explicit timer import simplegui # Initialize globals width = 600 height = 600 ...

  7. ssh "openssh-daemon is stopped"操作之伤+sftp访问“-bash: /dev/null: Permission denied”

    1.ssh "openssh-daemon is stopped"操作之伤 原来好好的 sshd服务突然发现  不能重新启动了: [root@bogon rules.d]# ser ...

  8. Java -- WeakHashMap

    一.引言 Java中的引用类型由四种情况,强引用.软引用.弱引用.虚引用.关于这些的介绍可以参见鄙人另外一篇博文.                                           ...

  9. QT窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透

    qt 窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透 窗口置顶qt 里是 setWindowFlags(Qt::WindowStaysOnTopHint)kde 里 ...

  10. Winform ErrorProvider控件使用

    要实现的功能:判断第一个文本框中输入的是不是字符 “a”. 最终效果: *当输入的不是a,控件旁会显示错误图标.当输入的是a,则错误图标会消失. 首先添加ErrorProvider控件. 代码: pr ...