• 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

  • 相关阅读:
    FortiGate 硬件加速
    RSA modulus too small: 512 < minimum 768 bits
    VMXNET3 vs E1000E and E1000
    BZOJ 1432: [ZJOI2009]Function(新生必做的水题)
    BZOJ 2456: mode(新生必做的水题)
    BZOJ 1968: [Ahoi2005]COMMON 约数研究(新生必做的水题)
    BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
    海量数据处理算法总结【超详解】
    POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
    图的存储结构之邻接表(详解)
  • 原文地址:https://www.cnblogs.com/findumars/p/5794216.html
Copyright © 2020-2023  润新知