zoukankan      html  css  js  c++  java
  • Qt自定义带游标的slider,在滑块正上方显示当前值(非常有意思,继承QSlider之后增加一个QLabel,然后不断移动它)

    首先自定义QSlider的子类MyCustomSlider,如下所示。

    mycustomslider.h

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. #ifndef MYCUSTOMSLIDER_H  
    2. #define MYCUSTOMSLIDER_H  
    3. #include <QSlider>  
    4. #include <QLabel>  
    5. #include <QMouseEvent>  
    6. class MyCustomSlider : public QSlider  
    7. {  
    8. public:  
    9.     MyCustomSlider(QWidget *parent=0);  
    10.     ~MyCustomSlider();  
    11.   
    12. protected:  
    13.     virtual void mousePressEvent(QMouseEvent *event);  
    14.     virtual void mouseReleaseEvent(QMouseEvent *event);  
    15.     virtual void mouseMoveEvent(QMouseEvent *event);  
    16.   
    17. private:  
    18.     QLabel* m_displayLabel;  
    19. };  
    20.   
    21. #endif // MYCUSTOMSLIDER_H  

    mycustomslider.cpp

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. #include "mycustomslider.h"  
    2. #include <QPalette>  
    3.   
    4. MyCustomSlider::MyCustomSlider(QWidget *parent):QSlider(parent)  
    5. {  
    6.    m_displayLabel=new QLabel(this);  
    7.    m_displayLabel->setFixedSize(QSize(20,20));  
    8.    //设置游标背景为白色  
    9.    m_displayLabel->setAutoFillBackground(true);  
    10.    QPalette palette;  
    11.    palette.setColor(QPalette::Background, Qt::white);  
    12.    m_displayLabel->setPalette(palette);  
    13.   
    14.    m_displayLabel->setAlignment(Qt::AlignCenter);  
    15.   
    16.    m_displayLabel->setVisible(false);  
    17.    m_displayLabel->move(0,3);  
    18. }  
    19.   
    20. MyCustomSlider::~MyCustomSlider()  
    21. {  
    22.   
    23. }  
    24.   
    25. void MyCustomSlider::mousePressEvent(QMouseEvent *event)  
    26. {  
    27.     if(!m_displayLabel->isVisible())  
    28.     {  
    29.         m_displayLabel->setVisible(true);  
    30.         m_displayLabel->setText(QString::number(this->value()));  
    31.     }  
    32.     QSlider::mousePressEvent(event);  
    33. }  
    34.   
    35. void MyCustomSlider::mouseReleaseEvent(QMouseEvent *event)  
    36. {  
    37.     if(m_displayLabel->isVisible())  
    38.     {  
    39.         m_displayLabel->setVisible(false);  
    40.     }  
    41.     QSlider::mouseReleaseEvent(event);  
    42. }  
    43.   
    44. void MyCustomSlider::mouseMoveEvent(QMouseEvent *event)  
    45. {  
    46.     m_displayLabel->setText(QString::number(this->value()));  
    47.     m_displayLabel->move((this->width()-m_displayLabel->width())*this->value()/(this->maximum()-this->minimum()),3);  
    48.     QSlider::mouseMoveEvent(event);  
    49. }  

    然后将界面QSlider控件提升为MyCustomSlider,提升方法如下所示。

    Qt中控件类的提升

    最后的效果如下图所示,当鼠标点击滑块或者拖动滑块时,滑块正上方的游标实时显示当前值,松开鼠标时,游标隐藏。




    源码链接:见http://blog.csdn.net/caoshangpa/article/details/51973902

    源码链接:http://download.csdn.net/detail/caoshangpa/9581687

  • 相关阅读:
    43、生鲜电商平台-你应该保留的一些学习态度与学习方法
    44、生鲜电商平台-Java后端生成Token架构与设计详解
    42、生鲜电商平台-商品的spu和sku数据结构设计与架构
    Bag of features:图像检索
    立体视觉—计算视差图
    三维重建——对极几何与基础矩阵
    计算机视觉——相机参数标定
    图像的拼接融合
    Unity Hub安装异常的解决方案
    针对“需要管理权限才能删除文件夹”的解决方案
  • 原文地址:https://www.cnblogs.com/findumars/p/5702200.html
Copyright © 2011-2022 走看看