2012-06-21 78 views
0

我寫了一個自定義類來覆蓋QSlider的查找方法。基本上這個類允許在用戶點擊的地方找到滑塊。在main.cpp中定製類的信號和插槽

QApplication app(argc, argv); 
    MainWindow player; 
    Tbslider tbslider; 
    GSTEngine listen 
    app.connect(&tbslider, SIGNAL(tbJump(int)), &listen, SLOT(jump(int))); 

tbslider.h

#ifndef TBSLIDER_H 
#define TBSLIDER_H 

#include <QSlider> 
#include <QObject> 

class Tbslider: public QSlider 
{ 
    Q_OBJECT 
public: 
    explicit Tbslider(QWidget *parent=0); 

signals: 
    void tbJump(int); 
protected: 
    void mousePressEvent(QMouseEvent *event); 
private: 
    QSlider *qslider; 
}; 
#endif // TBSLIDER_H 

tbslider.cpp

#include <iostream> 
#include <QEvent> 
#include <QPoint> 
#include <QMouseEvent> 
#include "tbslider.h" 

Tbslider::Tbslider(QWidget *parent):QSlider(parent) 
{ 

} 
void Tbslider::mousePressEvent(QMouseEvent *event) 
{ 
QSlider::mousePressEvent(event); 

    std::cout<<"\nX co-ordinate"<<event->x(); 
    std::cout<<"\nY co-ordinate"<<event->y(); 
    int value =(minimum() + ((maximum()-minimum()) * event->x())/width()) ; 
    setValue(value); 
    emit tbJump(value); 
} 

信號和槽上面的代碼應該工作。還有什麼我需要做的?

+0

爲了使您的組件儘可能與'QSlider'兼容,請使用它的信號 - 不需要您創建信號,請使用'valueChanged(int value)'。這已經由'setValue(int)'發出了。 – cmannett85

+0

它不起作用? – cmannett85

+0

我發射信號來呼叫另一個類的公共插槽。 –

回答

0

的功能應該是

void Tbslider::mousePressEvent(QMouseEvent *event) 
{ 


    std::cout<<"\nX co-ordinate"<<event->x(); 
    std::cout<<"\nY co-ordinate"<<event->y(); 
    int value =(minimum() + ((maximum()-minimum()) * event->x())/width()) ; 
    setValue(value); 
    emit tbJump(value); 
    QSlider::mousePressEvent(event); 
} 

調用QSlider :: mousePressEvent(事件)在開始的時候導致的基類return語句。