Вы должны опираться на QPushButton
и переопределять эти обработчики событий.
class MyButton : public QPushButton
{
protected:
virtual void mousePressEvent(QMouseEvent* event);
virtual void mouseReleaseEvent(QMouseEvent* event);
};
void MyButton::mousePressEvent(QMouseEvent *ev){
if(ev->buttons() == Qt::LeftButton){
qDebug() << "Left pressed";
ui->forceBar->setValue(100);
}
}
void MyButton::mouseReleaseEvent(QMouseEvent *ev){
if(ev->button() == Qt::LeftButton){
ui->forceBar->setValue(50);
qDebug() << "Left released";
}
Затем используйте эту кнопку, как pushbuttontest
:
QPushButton* pushbuttontest = new MyButton();
Или, если вы хотите иметь общий обработчик событий для многих виджетов, вы можете использовать фильтры событий:
class test : public QWidget // the widget in which you want to capture all events
{
public:
bool eventFilter(QObject *watched, QEvent *e);
private:
QPushButton* pushbuttontest;
QLabel *myLabel;
};
bool test::eventFilter(QObject *watched, QEvent *e)
{
if (e->type() == QEvent::MouseButtonPress))
{
QMouseEvent* ev = (QMouseEvent*)e;
if(ev->buttons() == Qt::LeftButton){
qDebug() << "Left pressed";
ui->forceBar->setValue(100);
}
}
else if (e->type() == QEvent::MouseButtonRelease)
{
QMouseEvent* ev = (QMouseEvent*)e;
if(ev->buttons() == Qt::LeftButton){
qDebug() << "Left released";
ui->forceBar->setValue(100);
}
}
return false;// return true if you are finished handling the event. So, the default event handler will not be called.
}
Затем установите eventFilter в нужные виджеты:
pushbuttontest = new QPushButton();
pushbuttontest->instalEventFilter(this); // this is the test class object which has our event filter code.
myLabel = new QLabel();
myLabel->installEventFilter(this);
и т. Д.
Обратите внимание, что я не скомпилировал этот код. Это может не сработать сразу.
Для получения дополнительной информации: http://qt-project.org/doc/qt-4.8/eventsandfilters.html
Так что я не могу иметь только один обработчик, который управлять кнопкой мыши? Если я нажму на ярлык, на кнопку или где-нибудь? –
Да, вы можете. Использование механизма фильтра событий. Я добавил его к своему ответу. – Hariprasad