• 21584阅读
  • 31回复

QT编写的自定义UI示例-自定义标题栏支持最小化最大化关闭双击鼠标拖动改变大小等 [复制链接]

上一主题 下一主题
离线liudianwu
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2014-07-30
1:真正意义上的无边框自定义标题栏,支持最小化最大化关闭,支持标题栏双击实现,支持鼠标拖动,支持鼠标在边框处拖动改变窗体大小,网络上的绝大部分都是扯蛋,要么不支持鼠标改变界面大小,要么鼠标移到其它按钮界面瞬间移动等各种不理想状态。
2:无任何资源文件,纯QSS实现精美标题栏及自定义按钮样式,可以稍作修改增加更多的样式,QSS真是太强大了!
3:使用fontawesome-webfont.ttf字体文件实现最小化最大化关闭等按钮文字,图形文字,很好很强大!
4:提供16种各类曲线啥线的绘制,只需点击一下按钮即可切换观看效果!
5:主窗体界面与功能界面分离,注释两行代码即可。
6:代码最精简,可免费用于任何项目!
7:感谢网络上各种共享资源。










CSDN下载地址:http://download.csdn.net/detail/feiyangqingyun/7694831

2014-7-31更新:
刚投标回来,80万的软件项目!一回来看到勇哥的回复,甚是高兴!在CSDN放了10分,确实太黑了!这次将完美版的放出。
稍微修正了一下,去除了与界面无关的东西,QT4-QT5.3之间任何版本均可编译通过!
将按钮获取焦点之后的虚边框去除,最大化不屏蔽任务栏,增加左上角ICO图标。




如果有人有更好的更改后的,请回帖,谢谢!
猛击这里下载 QUI.zip (907 K) 下载次数:1357
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线liudianwu

只看该作者 1楼 发表于: 2014-07-30
部分QSS样式:
  1. #widget_main{
  2.     border:1px solid rgb(100, 149, 237);    
  3. }
  4. #widget_title{
  5.     background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(27, 137, 202, 255), stop:1 rgba(16, 119, 181, 255));
  6. }
  7. #lab_Title{
  8.     font: 10pt "微软雅黑";
  9.     color: rgb(255, 255, 255);
  10. }
  11. #widget_menu .QPushButton{
  12.     color: rgb(183, 218, 238);
  13.     background-color:rgba(0,0,0,0);
  14.     border-style:none;
  15. }
  16. #widget_menu .QPushButton:hover{
  17.     background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(25, 134, 199, 0), stop:1 rgba(72, 160, 212, 255));
  18. }
  19. #widget_menu #btnMenu_Close:hover{
  20.     background-color: qlineargradient(spread:pad, x1:0, y1:1, x2:0, y2:0, stop:0 rgba(238, 0, 0, 128), stop:1 rgba(238, 44, 44, 255));
  21. }
  22. #widget_main .QPushButton{
  23.     border-style:none;
  24.     border: 0px;
  25.     font: 10pt "微软雅黑";
  26.     color: rgb(255, 255, 255);
  27.     padding: 4px;
  28.     min-width: 45px;
  29.     min-height: 25px;
  30. }
  31. #widget_main .QPushButton{
  32.     background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(92, 172, 238, 255), stop:1 rgba(100, 149, 237, 255));
  33. }
  34. #widget_main .QPushButton:hover{
  35.     background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(27, 137, 202, 255), stop:1 rgba(16, 119, 181, 255));
  36. }
  37. #widget_main .QPushButton:pressed{
  38.     background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(92, 172, 238, 255), stop:1 rgba(100, 149, 237, 255));
  39. }
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线彩阳

只看该作者 2楼 发表于: 2014-07-30
精准、熟练操作QSS,很强大!
上海Qt开发联盟,热忱地欢迎你的加入!
离线feifeishu

只看该作者 3楼 发表于: 2014-07-30
很好,很强大,有太多东西值得学习和参考了~
离线qibbs

只看该作者 4楼 发表于: 2014-07-30
很厉害!!学习了!!
春梦觉来心自警,往事般般应。
离线pain22

只看该作者 5楼 发表于: 2014-07-31
大佬,你设了10个积分,谁下载得了啊
离线kimtaikee

只看该作者 6楼 发表于: 2014-07-31
你可够黑心的,不在这里下载弄到CSDN赚积分。你可知道我在那边连3分的书都下不了吗?

离线kimtaikee

只看该作者 7楼 发表于: 2014-07-31
这个QCustomPlot是比Qwt看着舒服些,可惜也是没有2D和3D饼图。
http://www.qcustomplot.com/index.php/download
源码 QCustomPlot.tar.gz (3568 K) 下载次数:163

离线liudianwu

只看该作者 8楼 发表于: 2014-07-31
回 pain22 的帖子
不好意思让你破费了! QUI.zip (907 K) 下载次数:0
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线liudianwu

只看该作者 9楼 发表于: 2014-07-31
回 kimtaikee 的帖子
勇哥好!不好意思让你花了10分!我CSDN大学时候就有九千多分,下次不够可以找我哈!我更新了下源码,已在帖子中增加了更新说明!
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线qibbs

只看该作者 10楼 发表于: 2014-07-31
我试了一下怎么会编译不通过呢?
春梦觉来心自警,往事般般应。
离线goodname

只看该作者 11楼 发表于: 2014-07-31
既然作者做的这么细致,我再提几条要求,看看能不能做个升级版。
(1)窗口左边图标上,鼠标左右键均可出菜单。
(2)标题栏右键菜单,菜单内容同(1)
(3)窗口右边图标上,增加ToolTips
(4)鼠标移动到窗口四个角上的变成斜线状的图标时,可以同时调整窗口长和宽,原生窗口变成斜线鼠标的直角区域比你的大一些,这样操作更方便些。
(5)简单看了下代码,重新实现了winEvent,这种方式是不是不能跨平台呢,我没实验过。

我很少发帖,一下子写了这么多,剩下的就看你的了。
离线liudianwu

只看该作者 12楼 发表于: 2014-07-31
回 goodname 的帖子
goodname:既然作者做的这么细致,我再提几条要求,看看能不能做个升级版。
(1)窗口左边图标上,鼠标左右键均可出菜单。
(2)标题栏右键菜单,菜单内容同(1)
(3)窗口右边图标上,增加ToolTips
(4)鼠标移动到窗口四个角上的变成斜线状的图标时,可以同时调整窗口长和宽,原生窗口变 .. (2014-07-31 13:59) 

嗯,很好,多谢提意见!
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线cnhemiya

只看该作者 13楼 发表于: 2014-08-01
很好,很强大
离线liudianwu

只看该作者 14楼 发表于: 2014-08-02
将这个自定义标题栏重新应用于报警监控系统中!





欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线liudianwu

只看该作者 15楼 发表于: 2014-08-02

欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线facturi

只看该作者 16楼 发表于: 2014-08-04
将源码编译了一下,运行出错,是QList越界错误。

只看该作者 17楼 发表于: 2014-08-05
1、尝试了一下,鼠标不能在边界上拖动
2、无资源图标造成图标显示不出来
3、下标越界QString fontName = QFontDatabase::applicationFontFamilies(fontId).at(0);
4、最大化拖动时候界面应该还原到最大化之前的状态
博客地址:https://waleon.blog.csdn.net
微信公众号:高效程序员
QQ 群:242790253
微信群:加微信(iwaleon),邀请入群。

承接各种 C++/Qt/QML 项目,专业的团队,一流的服务,不二的选择!
离线huangyuancao

只看该作者 18楼 发表于: 2014-08-06
没研究透
离线自强不吸

只看该作者 19楼 发表于: 2014-08-06
自强不吸!
离线liudianwu

只看该作者 20楼 发表于: 2014-08-07
回 奋斗ing孩子 的帖子
奋斗ing孩子:1、尝试了一下,鼠标不能在边界上拖动
2、无资源图标造成图标显示不出来
3、下标越界QString fontName = QFontDatabase::applicationFontFamilies(fontId).at(0);
4、最大化拖动时候界面应该还原到最大化之前的状态
 (2014-08-05 16:09) 

使用的是fontawesome-webfont.ttf图形字体,无需图片资源,编译后将源码目录下的fontawesome-webfont.ttf拷贝到可执行文件目录即可!其实也可以将fontawesome-webfont.ttf封装到QT资源文件,这样的话就不需要拷贝过去了,也不会出现下标越界的情况!
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线shuijinliuxi

只看该作者 21楼 发表于: 2014-11-16
QList越界错误是解压后的路径问题:
int fontId = QFontDatabase::addApplicationFont(qApp->applicationDirPath() + "/fontawesome-webfont.ttf");
必须确保ttf文件在该路径下,否则QList越界。
离线blueany

只看该作者 22楼 发表于: 2015-08-13
拖动界面上任何一个非Button区域,窗口也跟着拖动了,修改了一下只能拖动标题栏。


if(e->button() == Qt::LeftButton)
改成
if(e->button() == Qt::LeftButton && e->y() <= ui->widget_title->height())

另外,初学Qt的我看不懂qss在哪里设置的。
非常感谢楼主的奉献精神。
离线crazy

只看该作者 23楼 发表于: 2015-08-13
很好,支持!
C/C++/Qt爱好者
邮箱: kevinlq0912@163.com
公众号: devstone
博客:http://kevinlq.com/
离线苍井空

只看该作者 24楼 发表于: 2015-08-18
为什么这个代码缺少文件?
离线苍井空

只看该作者 25楼 发表于: 2015-08-18
代码缺少文件啊。
本帖提到的人: @liudianwu
离线liudianwu

只看该作者 26楼 发表于: 2015-08-18
回 苍井空 的帖子
苍井空:代码缺少文件啊。 (2015-08-18 13:43) 

请看这里:http://www.qtcn.org/bbs/read-htm-tid-59173.html
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线lmh5584258

只看该作者 27楼 发表于: 2015-08-28
非常不错
离线qinlian2010

只看该作者 28楼 发表于: 2019-12-14
大神太厉害了
离线mountainhigh

只看该作者 29楼 发表于: 2021-02-09
厉害,学习了
离线weizhimubiao

只看该作者 30楼 发表于: 2021-04-20
感谢刘大分享
离线yuan__xing

只看该作者 31楼 发表于: 2022-03-22
楼主,请问缺少window.h 和windowsx.h文件如何解决呢?
环境:linux qt5.11
快速回复
限100 字节
 
上一个 下一个