Qtにはボタンのようなウィジェットがありますが、これは押しボタン時間の長さによってはより高い変更ステップ値を生成しますか?ボタンを長押しするほど、より高い価値のステップが得られます。 [Qt]
もしそうでなければ、どのように設計するのですか?この機能を取得するために
Qtにはボタンのようなウィジェットがありますが、これは押しボタン時間の長さによってはより高い変更ステップ値を生成しますか?ボタンを長押しするほど、より高い価値のステップが得られます。 [Qt]
もしそうでなければ、どのように設計するのですか?この機能を取得するために
号
、1つのアプローチは、おそらく親オブジェクトとして(パラメータとしてQAbstractButton*
をとり、そのメモリ管理が世話を取得するヘルパークラス、通常のQObject
サブクラスを作成することです"自動的に"の)。次に、このヘルパーオブジェクトはpressed()
とreleased()
信号を接続し、例えばQElapsedTimer
を使用してボタンを押す時間を計算します。そして、それはあなたが望むことを行うカスタム信号を放射する必要があります(QTimer
を使用して間隔を空けてパラメータのない信号を放出しますか?
他にも多くの方法があります。ボタンクラスをサブクラス化してサブクラスに実装することもできますし、QAbstractButton
をサブクラス化して、目的の実際のボタンオブジェクトをそれに注入し、仮想メソッド呼び出しを委譲することもできます。または、他の何か。
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)));
そこには、このようなウィジェットがありませんが、あなたはそれを自分で作成することができます。 keyPressEventとkeyReleaseEventを使用して時間を測定し、他に必要なものを実行してください。 – demonplus
この質問は 'QPushButton'についてのようですが、実際にはキーイベントはOPが望むものを得るのに便利ではありません。しかし原則が適用されます。 – hyde