2012-06-21 3 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

기능은 처음에 QSlider :: mousePressEvent (이벤트) 기본 클래스에서 return 문 결과 호출

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); 
} 

해야한다.