2016-11-08 54 views
0

Qtにはボタンのようなウィジェットがありますが、これは押しボタン時間の長さによってはより高い変更ステップ値を生成しますか?ボタンを長押しするほど、より高い価値のステップが得られます。 [Qt]

もしそうでなければ、どのように設計するのですか?この機能を取得するために

+2

そこには、このようなウィジェットがありませんが、あなたはそれを自分で作成することができます。 keyPressEventとkeyReleaseEventを使用して時間を測定し、他に必要なものを実行してください。 – demonplus

+0

この質問は 'QPushButton'についてのようですが、実際にはキーイベントはOPが望むものを得るのに便利ではありません。しかし原則が適用されます。 – hyde

答えて

0

、1つのアプローチは、おそらく親オブジェクトとして(パラメータとしてQAbstractButton*をとり、そのメモリ管理が世話を取得するヘルパークラス、通常のQObjectサブクラスを作成することです"自動的に"の)。次に、このヘルパーオブジェクトはpressed()released()信号を接続し、例えばQElapsedTimerを使用してボタンを押す時間を計算します。そして、それはあなたが望むことを行うカスタム信号を放射する必要があります(QTimerを使用して間隔を空けてパラメータのない信号を放出しますか?

他にも多くの方法があります。ボタンクラスをサブクラス化してサブクラスに実装することもできますし、QAbstractButtonをサブクラス化して、目的の実際のボタンオブジェクトをそれに注入し、仮想メソッド呼び出しを委譲することもできます。または、他の何か。

0

pressbutton.h

#ifndef PRESSBUTTON_H 
#define PRESSBUTTON_H 

#include <QPushButton> 
#include <QElapsedTimer> 
#include <QMouseEvent> 


class PressButton : public QPushButton 
{ 
    Q_OBJECT 
public: 
    explicit PressButton(QWidget *parent=0): QPushButton(parent) {} 
    explicit PressButton(const QString &text, QWidget *parent=0) : QPushButton(text,parent) {} 
    PressButton(const QIcon& icon, const QString &text, QWidget *parent=0) : QPushButton(icon,text,parent) {} 
    ~PressButton() {} 

private: 
    void mousePressEvent(QMouseEvent *e); 
    void mouseReleaseEvent(QMouseEvent *e); 

signals: 
    void mouseTimerClick(qint64 ms); 

private: 
    QElapsedTimer m_timer; 
}; 

#endif // PRESSBUTTON_H 

pressbutton.cpp:

#include "pressbutton.h" 

void PressButton::mousePressEvent(QMouseEvent *e) 
{ 
    m_timer.start(); 
    QPushButton::mousePressEvent(e); 
} 

void PressButton::mouseReleaseEvent(QMouseEvent *e) 
{ 

    emit mouseTimerClick(m_timer.elapsed()); 
    QPushButton::mousePressEvent(e); 
} 

用法:

PressButton* pressButton = new PressButton(this); 
connect(pressButton,SIGNAL(mouseTimerClick(qint64)),this,SLOT(onMouseTimerClick(qint64))); 
関連する問題