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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM