zoukankan      html  css  js  c++  java
  • Qt自定义带游标的slider,在滑块正上方显示当前值(类似于进度条,用一个额外的QLabel冒充QSilder的一部分,然后move就行了)

    首先自定义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://blog.csdn.net/caoshangpa/article/details/51973902

  • 相关阅读:
    结对-结对编项目贪吃蛇-开发环境搭建过程
    gitbook serve运行报错TypeError: cb.apply is not a function
    iOS 工程添加的framework转成pod形式加入
    selector not recognized
    Errors were encountered while preparing your device for development. Please check the Devices and Simulators Window.
    podspec 添加xcassets
    后缀自动机(SAM)构造实现过程演示+习题集锦
    数组中存在undefined,0,null,false等的情况该如何去除
    Uncaught TypeError: date.clone is not a function 【报错解决】
    React·前端URL参数丢失符号的解决办法
  • 原文地址:https://www.cnblogs.com/findumars/p/5794216.html
Copyright © 2011-2022 走看看