Qt 之 自定义按钮 在鼠标 悬浮、按下、松开后的效果(转载)_qt按钮设置悬停时-程序员宅基地

技术标签: Qt  

————————————————

版权声明:本文为CSDN博主「前行中的小猪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/goforwardtostep/article/details/53464925

Qt技术学习班开始了,更多精彩、好玩的内容等着你,赶紧报名吧! 群号:655815739


一、简述

在上一篇 Qt 之 去除窗口部件被选中后的焦点虚线框 中,我们为了去除焦点虚线框,给按钮的样式加上了如下的样式。

QPushButton
{
    background:red;
    border:0px;
}
 
 
  

    这里我们需要准备几张图片:

    这里写图片描述


    运行效果图:

    这里写图片描述


    登录按钮效果背景图片

    资源图片:

    这里写图片描述

    效果图:
    这里写图片描述


    2、通过设置样式控制不同显示效果

    QPushButton#pButtonOk
    {
        color:white;
        background-color:rgb(14 , 150 , 254);
        border: 1px solid rgb(11 , 137 , 234);
    }
    
    QPushButton#pButtonOk:hover
    {
        color:white;
        background-color:rgb(44 , 137 , 255);
        border: 1px solid rgb(11 , 137 , 234);
    }
    
    QPushButton#pButtonOk:pressed
    {
        color:white;
        background-color:rgb(14 , 135 , 228);
        border: 1px solid rgb(12 , 138 , 235);
        padding-left:3px;
        padding-top:3px;
    }
    
    QPushButton#pButtonCancel
    {
        color:black;
        background-color:rgb(238 , 238 , 238);
        border: 1px solid rgb(183 , 183 , 183);
    }
    
    QPushButton#pButtonCancel:hover
    {
        color:black;
        background-color:rgb(228 , 240 , 250);
        border: 1px solid rgb(15 , 150 , 255);
    }
    
    QPushButton#pButtonCancel:pressed
    {
        color:black;
        background-color:rgb(204 , 228 , 247);
        border: 1px solid rgb(1 , 84 , 153);
        padding-left:3px;
        padding-top:3px;
    }
     
     
      

      这里写图片描述

      这种方法比上面用图标作为背景的好处就是可以随意更改文字以及文字的大小、位置、字体等显示效果



      综上:

      1、设置背景图方式

      优点 :样式简单,直接设置border-image即可,可以选取漂亮的UI图片总体上可能会比单纯通过样式设置显示效果要好一些。(如果UI图选取效果不好的情况下,效果可能没有单纯设置样式好看,这就要看个人的审美观了哈O(∩_∩)O!)

      缺点 :需要自己制定背景效果图, 可能比较耗时

      2、通过设置样式控制不同显示效果

      优点:不需要准备背景图,直接通过样式设置,简单、粗暴,想怎么设置就怎么设置(前提是要会一点CSS),能够更好地控制显示效果(比如控制文字的大小,位置、字体等)。

      缺点:样式稍微复杂,需要懂更多的CSS样式,如果需要在按钮上加图标什么的就必须要加载背景图片了,单纯靠样式解决不了。


      以上总结了两种方法的优缺点,可以说这两种方法可以相互取长补短,基本上运用好这两种方式就能够做出精美的按钮了,具体采样哪种方式就看自己如何选择了哈 O(∩_∩)O!


      注意

      QPushButton
      {
          border-image:url(:/Resources/registeraccount_hover.png);
      }
       
       
        
      • 如果我们使用如上样式,将会对所有的QPushButton进行设置样式,如果只需要给某一个则用以下格式:

        “QPushButton#” + “按钮名称(objectName)”

        我们主要用到了按钮的三种状态,分别是鼠标悬浮、按下、松开 。

        // 正常状态或者鼠标松开按钮的状态
        QPushButton
        {}
        //鼠标悬浮在按钮上的状态
        QPushButton:hover
        {}
        //鼠标按下按钮时的状态
        QPushButton:pressed
        {}
        
        // 我们只需在不同状态下的{}中填写不同的样式,在我们对按钮进行操作时就会显示不同的样式效果。
           
           
             

        • 以上只是简单地介绍了对按钮设置的一些样式,其他控件的样式可以查看Qt的文档。这里我们通过设置样式实现了自定义 按钮在不同状态下的效果,不再依靠系统自带的凹陷效果。

          下面是我模仿QQ做的一个界面。欢迎大家随时交流哈 O(∩_∩)O!

          这里写图片描述

          ————————————————

          版权声明:本文为CSDN博主「前行中的小猪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

          原文链接:https://blog.csdn.net/goforwardtostep/article/details/53464925

      版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
      本文链接:https://blog.csdn.net/lxj362343/article/details/106125958

      智能推荐

      android-----XUtils框架之BitmapUtils加载照片实现_android图片加载bitmap-程序员宅基地

      文章浏览阅读5.4k次。作为比较成熟的流行框架,XUtils中的BitmapUtils部分为我们加载照片提供了很大方便,他集成了LRUCache和DiskLruCache缓存机制,在很大程度上避免了我们在加载较多 照片时出现的OOM异常,这篇博客我们从使用的角度学习下BitmapUtils的用法,下一篇将从源码的角度带你真正了解BitmapUtils; 我们使用BitmapUtils实现一个照片墙的功能_android图片加载bitmap

      pycharm切换python版本后,No Python at ‘C:\Program Files\Python39\python.exe‘问题消除_no python at 'c:\program files\python39\python.exe-程序员宅基地

      文章浏览阅读2.3w次,点赞8次,收藏22次。一,拿到别人的Pycharm脚本运行,发现是基于Python3.8的版本,而自己环境是Python3.9的版本,切换方法见百度经验https://jingyan.baidu.com/article/6d704a136f04ac28db51cad5.html二.pycharm怎么切换python版本,No Python at 'C:\Program Files\Python39\python.exe'问题消除问题描述:原因分析:Porject Interpreter没有设置完全_no python at 'c:\program files\python39\python.exe

      【Android Fragment】解决ViewPager嵌套时Fragment的mUserVisibleHint属性不同步的问题-程序员宅基地

      文章浏览阅读266次。2017-1-11日更新:setUserVisibleHint中过滤父Fragment未显示的情况上一篇【Android】友盟统计Fragment页面显示隐藏的完美解决方案 我们讲了通过Fragment的mUserVisibleHint属性可以准确的监听Fragment在ViewPager中的显示与隐藏现在新的问题又来了,当ViewPager嵌套ViewPager的时候子ViewPager中F..._viewpager嵌套viewpager fragment setuservisiblehint.

      安卓工具类:FileUtils_fileutils 注入-程序员宅基地

      文章浏览阅读268次。public class MineFileUtils { /** * 使用本地安装的文件查询器,打卡文件 * * @param activity * @param filepath */ public static void openAndroidFile(Activity activity, String filepath) ..._fileutils 注入

      如果有人能力不如你工资比你高怎么看?_比你菜工资比你高-程序员宅基地

      文章浏览阅读5.1k次,点赞3次,收藏3次。你在公司里工作,如果同办公室里的一个人,能力没有你强,但工资却高于你,你会不会有想法,心理能平衡吗?1. 错误回答:1) 我当然不平衡,那我还干的什么意思?2) 如果他的能力比我强,我不会有想法。如果没有我强,我肯定心理不平衡。(路健就是这样回答的)3) 如果公司对待员工是这样的不公平,肯定企业文化有问题,这样的公司只有走人。2. 正确回答:(别忘了换位思考原则)工资是员工最敏感的问题,公司一般都会尽量处理好,如果那个同事的能力不如我,工资还高于我,肯定是他在其他方面强于我。或者,他能为公司解决_比你菜工资比你高

      获取对话框当前cfont_VC调用系统字体对话框-程序员宅基地

      文章浏览阅读474次。1、通过MFC类调用字体对话框2、通过win32API函数调用字体对话框通过MFC类调用字体对话框CFontDialog构造函数CFontDialog(LPLOGFONTlplfInitial=NULL,DWORDdwFlags=CF_EFFECTS|CF_SCREENFONTS,CDC*pdcPrinter=NULL,CWnd*pParentWnd=NULL..._vc++如何获取当前计算中的系统字体

      随便推点

      配置llama实现impala on yarn-验证未通过,仅以此文作为参考-程序员宅基地

      文章浏览阅读1.2k次。以下内容采自网络,目前验证未通过,仅以此作为参考:简介:早期的Impala版本中,为了使用Impala,我们通常会在以Client/Server的结构在各个集群节点启动impala-server、impala-state-store和impala-catalog服务,并且在启动过程中无法动态调整内存和CPU的分配。CDH5之后,Impala开始支持Impala-on-yarn模式,通过一个叫做L..._llama

      BZOJ4939: [Ynoi2016]掉进兔子洞(莫队 bitset)-程序员宅基地

      文章浏览阅读80次。题意题目链接一个长为 n 的序列 a。有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完,比如三个区间是 [1,2,2,3,3,3,3] , [1,2,2,3,3,3,3] 与 [1,1,2,3,3],就一起扔掉了 1 个 1,1 个 2,2 个 3...

      soapui 自动化教程(三)_soapui nosr换行显示-程序员宅基地

      文章浏览阅读4.6k次,点赞6次,收藏9次。soapui 之 groovy 进阶上一节讲到如何使用groovy脚本执行用例。def testStep = TEST_SUITE.getTestCaseByName('TestSuite').getTestStepByName('login')def testStepContext = new WsdlTestRunContext(testStep)def result = testStep._soapui nosr换行显示

      python之argparse模块_argparse 参数缩写-程序员宅基地

      文章浏览阅读2.6k次。argparse 模块使编写用户友好的命令行界面变得更容易.程序只需定义好它要求的参数,然后argparse将负责如何从sys.argv中解析出这些参数。argparse模块还会自动生成帮助和使用信息并且当用户赋给程序非法的参数时产生错误信息。1.ArgumentParser类class argparse.ArgumentParser(prog=None, usage=None, de_argparse 参数缩写

      浅析LiveMedia智能视频网关的AI识别技术及应用场景_.net ai 识别视频直播的话语-程序员宅基地

      文章浏览阅读239次。LiveMedia智能视频边缘网关,支持对多路网络IPC和NVR设备的高清视频流进行实时智能分析。通过将网络摄像机、NVR、编码器等视频源设备统一集中接入和汇聚管理,对接入的多路高清视频流进行人、车、物、行为等实时检测与分析,结合硬件中内置的多种AI算法,实现人脸识别/检测、车辆识别/检测、目标检测、行为识别等目的,可对异常行为事件进行告警与提醒,支持对接视频结构化数据平台、大数据综合分析平台等。_.net ai 识别视频直播的话语

      Kinetis KL8x 使用eDMA模块接收串口数据_site: csdn.net edma循环-程序员宅基地

      文章浏览阅读1.6k次。飞思卡尔的芯片KL系列Cortex-M0+内核的,其他的应该可以通用,大体一致,之前在KL25上用过,这次是KL81,我对比两者使用类似,就是某些寄存器不同罢了正文开始:需要用LPUART接收上层接口的数据,比较大,而且大小不固定,之前用FIFO来接收,但是遇到收发错乱,很不稳定,故使用eDMA来接收#include "fsl_port_hal.h"#include "fsl_dev_site: csdn.net edma循环