2012-06-21 51 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语句。