查看完整版本: [-- QT编写动态生成自定义风格按钮 --]

QTCN开发网 -> Qt 作品展 -> QT编写动态生成自定义风格按钮 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

liudianwu 2015-01-27 20:46

QT编写动态生成自定义风格按钮

上个月有个兄弟在网上看到我公开的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{
    border-style:none;
    padding:5px;
    min-height:20px;
    border-radius:5px;
    }
    QPushButton[btnType="0"]{
    color:#FFFFFF;
    border:1px solid #F32AB7;
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #F32AB7,stop:1 #730453);
    }
    QPushButton[btnType="0"]:hover{
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #F064D0,stop:1 #78115B);
    }
    QPushButton[btnType="1"]{
    color:#FFFFFF;
    border:1px solid #4EE134;
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #4EE134,stop:1 #279113);
    }
    QPushButton[btnType="1"]:hover{
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #83E479,stop:1 #297B17);
    }
    QPushButton[btnType="2"]{
    color:#FFFFFF;
    border:1px solid #25ACF3;
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #25ACF3,stop:1 #0B5A96);
    }
    QPushButton[btnType="2"]:hover{
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #64B7E1,stop:1 #226196);
    }
    QPushButton[btnType="3"]{
    color:#FFFFFF;
    border:1px solid #A958F2;
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #A958F2,stop:1 #3E0C67);
    }
    QPushButton[btnType="3"]:hover{
    background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #B976F9,stop:1 #602B95);
    }

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

效果图:
[attachment=13182]
聊天截图:
[attachment=13185]
[attachment=13184]

横排竖排都设定一个layout就行了,和android极为类似,各种编程语言用多了,会发现是多么的惊人的相似,原理都一样,融会贯通!
代码:[attachment=13183]
希望大家可以多多支持下http://www.qtcn.org/bbs/read-htm-tid-58060.html,要什么样式风格,只要你给我界面截图,我就可以给你用QSS实现一个!

honei_x 2015-01-27 21:07
谢谢楼主分享,虽然我没法提供物质奖励,但是赞还是有的。


honei_x 2015-01-27 21:09
优秀文章,支持!

圣域天子 2015-01-28 08:09
赞一下

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

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

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

已经提供了代码下载啊!

coswh 2015-01-28 08:41
谢谢楼主

圣域天子 2015-01-28 08:57
liudianwu:已经提供了代码下载啊! (2015-01-28 08:26) 

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

toby520 2015-01-28 10:29
不错 QSS很灵活,但是就是不知道 动态创建的控件能否做到国际化

和尚也要 2015-01-28 15:41
鄙视那些说话算数的人!。楼主,顶你。我在你那买过源码哟。。。

yeguoxiong 2015-01-28 21:01
别用QSS了吧,选用QML吧。我早放弃用QSS了

keepmovingld 2017-07-31 19:22
参考一下

mountainhigh 2021-02-09 11:54
谢谢楼主


查看完整版本: [-- QT编写动态生成自定义风格按钮 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled