• 18161阅读
  • 11回复

QT编写动态生成自定义风格按钮 [复制链接]

上一主题 下一主题
离线liudianwu
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2015-01-27
上个月有个兄弟在网上看到我公开的QUI源码,http://www.qtcn.org/bbs/read-htm-tid-57229.html (全部开源),http://www.qtcn.org/bbs/read-htm-tid-58060.html(代码开源,QSS不开源),问我可不可以实现一种动态生成自定义风格颜色按钮,类似于一些股票金融软件顶部的导航条,初步看了看,完全可以实现,用QSS毫无压力,遂答应200元报酬搞定,东西做好了,人却没了消息,哎,程序员挣点奶粉钱真不容易啊!代码留着也没啥用,还是全部开源出来,大家尽情下载拿过去学习吧,呵呵!
代码很简单,先写好需要的按钮的QSS样式,然后在代码中以自定义属性的形式调用即可,我里面随手写了四种风格的按钮。
QSS样式:
  1. .QPushButton{
  2. border-style:none;
  3. padding:5px;
  4. min-height:20px;
  5. border-radius:5px;
  6. }
  7. QPushButton[btnType="0"]{
  8. color:#FFFFFF;
  9. border:1px solid #F32AB7;
  10. background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #F32AB7,stop:1 #730453);
  11. }
  12. QPushButton[btnType="0"]:hover{
  13. background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #F064D0,stop:1 #78115B);
  14. }
  15. QPushButton[btnType="1"]{
  16. color:#FFFFFF;
  17. border:1px solid #4EE134;
  18. background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #4EE134,stop:1 #279113);
  19. }
  20. QPushButton[btnType="1"]:hover{
  21. background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #83E479,stop:1 #297B17);
  22. }
  23. QPushButton[btnType="2"]{
  24. color:#FFFFFF;
  25. border:1px solid #25ACF3;
  26. background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #25ACF3,stop:1 #0B5A96);
  27. }
  28. QPushButton[btnType="2"]:hover{
  29. background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #64B7E1,stop:1 #226196);
  30. }
  31. QPushButton[btnType="3"]{
  32. color:#FFFFFF;
  33. border:1px solid #A958F2;
  34. background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #A958F2,stop:1 #3E0C67);
  35. }
  36. QPushButton[btnType="3"]:hover{
  37. background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #B976F9,stop:1 #602B95);
  38. }

代码:
  1. void frmMain::on_btnAdd_clicked()
  2. {
  3.     QPushButton *btn=new QPushButton;
  4.     btn->setFocusPolicy(Qt::NoFocus);
  5.     btn->setText(ui->txtName->text());
  6.     btn->setProperty("btnType",ui->cboxType->currentIndex());
  7.     ui->groupBox->layout()->addWidget(btn);
  8.     connect(btn,SIGNAL(clicked()),this,SLOT(on_btn_clicked()));
  9. }

效果图:

聊天截图:



横排竖排都设定一个layout就行了,和android极为类似,各种编程语言用多了,会发现是多么的惊人的相似,原理都一样,融会贯通!
代码: test.zip (5 K) 下载次数:584
希望大家可以多多支持下http://www.qtcn.org/bbs/read-htm-tid-58060.html,要什么样式风格,只要你给我界面截图,我就可以给你用QSS实现一个!
12条评分好评度+3贡献值+3金钱+9威望+3
nazugl 好评度 +1 - 2015-10-15
nazugl 贡献值 +1 - 2015-10-15
nazugl 威望 +1 - 2015-10-15
nazugl 金钱 +3 - 2015-10-15
wuming123057 好评度 +1 - 2015-01-28
wuming123057 贡献值 +1 - 2015-01-28
wuming123057 威望 +1 - 2015-01-28
wuming123057 金钱 +1 - 2015-01-28
honei_x 好评度 +1 优秀文章,支持! 2015-01-27
honei_x 贡献值 +1 优秀文章,支持! 2015-01-27
12
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线honei_x

只看该作者 1楼 发表于: 2015-01-27
谢谢楼主分享,虽然我没法提供物质奖励,但是赞还是有的。

离线honei_x

只看该作者 2楼 发表于: 2015-01-27
优秀文章,支持!
离线圣域天子

只看该作者 3楼 发表于: 2015-01-28
赞一下

另外把那人的ID公开出来,大家一起鄙视一下~~~

还有我想看到下面的显示效果的实现代码
离线liudianwu

只看该作者 4楼 发表于: 2015-01-28
回 圣域天子 的帖子
圣域天子:赞一下[表情]
另外把那人的ID公开出来,大家一起鄙视一下~~~
还有我想看到下面的显示效果的实现代码 [表情] (2015-01-28 08:09) 

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

只看该作者 5楼 发表于: 2015-01-28
谢谢楼主
离线圣域天子

只看该作者 6楼 发表于: 2015-01-28
回 liudianwu 的帖子
liudianwu:已经提供了代码下载啊! (2015-01-28 08:26) 

我是说下面的【聊天截图】效果的实现代码~~~
离线toby520

只看该作者 7楼 发表于: 2015-01-28
不错 QSS很灵活,但是就是不知道 动态创建的控件能否做到国际化
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线和尚也要

只看该作者 8楼 发表于: 2015-01-28
鄙视那些说话算数的人!。楼主,顶你。我在你那买过源码哟。。。
阿斯顿发送对方
离线yeguoxiong

只看该作者 9楼 发表于: 2015-01-28
别用QSS了吧,选用QML吧。我早放弃用QSS了
离线keepmovingld

只看该作者 10楼 发表于: 2017-07-31
参考一下
离线mountainhigh

只看该作者 11楼 发表于: 2021-02-09
谢谢楼主
快速回复
限100 字节
 
上一个 下一个