Qt中默認的qpushbutton沒有longpress事件,當需要相應btn的longpress事件的時候,就需要重載一下qpushbutton的press和release事件。
DycPushButton.h
<pre name="code" class="cpp">#ifndef DYCPUSHBUTTON_H
#define DYCPUSHBUTTON_H
#include "qpushbutton.h"
#include <QTimer>
#define TIMERSTART true;
#define TIMESTOP false;
class DycPushButton:QPushButton
{
public:
DycPushButton();
private:
QTimer m_pcPressTimer;
int m_nPressTime;
bool m_bTimerStart;
public :
void setLongPressTime(int PressTime);
public:
bool mousePressEvent(QMouseEvent *event);
bool mouseReleaseEvent(QMouseEvent *event);
bool mouseDoubleClickEvent(QMouseEvent *event);
bool mouseMoveEvent(QMoveEvent *event);
signals:
onBtnLongPressed();
private slots:
onTimeOut();
};
#endif // DYCPUSHBUTTON_H
<span style="font-family: Arial, Helvetica, sans-serif;">DycPushButton.cpp</span>
</pre><pre name="code" class="cpp">#include "DycPushButton.h"
DycPushButton::DycPushButton()
{
m_pcPressTimer = new QTimer(this);
m_bTimerStart = TIMESTOP;
connect(m_pcPressTimer,SIGNAL(timeout()),this,(onTimeOut()));
}
//設置longpress時間
void DycPushButton::setLongPressTime(int PressTime)
{
if(PressTime)
{
m_nPressTime = PressTime;
}
}
//btn press時開始計時
bool DycPushButton::mousePressEvent(QMouseEvent *event)
{
if(m_nPressTime)
{
m_bTimerStart = TIMERSTART;
m_pcPressTimer.start(m_nPressTime);
}
return mousePressEvent(event);
}
//btn release時停止計時
bool DycPushButton::mouseReleaseEvent(QMouseEvent *event)
{
if(m_bTimerStart)
{
m_pcPressTimer.stop();
<pre style="margin-top: 0px; margin-bottom: 0px;"><pre name="code" class="cpp"> m_bTimerStart = TIMESTOP;
}
return mouseReleaseEvent(event);
}
bool DycPushButton::mouseDoubleClickEvent(QMouseEvent *event)
{
return mouseDoubleClickEvent(event);
}
bool DycPushButton::mouseMoveEvent(QMoveEvent *event)
{
return mouseMoveEvent(event);
}
//SLOT function is belown
void DycPushButton::onTimeOut()
{
emit onBtnLongPressed();
m_bTimerStart = TIMESTOP;
}