0

I have a set of widgets to control a parameter in five similar places (or channels).

enter image description here

Now I can enable/disable each of these widgets using a pushbuttons, as follows.

connect(ui->pushButton_currOnOne, &QPushButton::clicked, ui->widget_currentOne, &CurrentButtonOne::setEnabled);
connect(ui->pushButton_currOnTwo, &QPushButton::clicked, ui->widget_currentTwo, &CurrentButtonOne::setEnabled);
connect(ui->pushButton_currOnThree, &QPushButton::clicked, ui->widget_currentThree, &CurrentButtonOne::setEnabled);
connect(ui->pushButton_currOnFour, &QPushButton::clicked, ui->widget_currentFour, &CurrentButtonOne::setEnabled);
connect(ui->pushButton_currOnFive, &QPushButton::clicked, ui->widget_currentFive, &CurrentButtonOne::setEnabled);

Can I use mousePressEvent/mouseReleaseEvent instead of using &QPushButton::clicked in the above scenario? It will be very helpful if you could show me an example.

Thanks in advance

m7913d
  • 10,244
  • 7
  • 28
  • 56
tetra
  • 177
  • 3
  • 11
  • 3
    Difference between signals (`QPushButton::clicked`) and events (`mousePressEvent`): https://stackoverflow.com/questions/3794649/qt-events-and-signal-slots – m7913d Aug 14 '20 at 09:17

1 Answers1

1

Some code to get you started.

mybutton.h:

#include <QObject>
#include <QPushButton>
#include <QMouseEvent>

class MyButton : public QPushButton
{
public:
    explicit MyButton(QWidget *parent = nullptr);
    
protected:
    void mousePressEvent(QMouseEvent *e) override;
    void mouseReleaseEvent(QMouseEvent *e) override;
    
private:
    bool isPressed = false;
    
signals:
    void myButtonPressed();
};

mybutton.cpp:

#include "mybutton.h"

MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{
    
}

void MyButton::mousePressEvent(QMouseEvent *e)
{
    isPressed = true;
    emit myButtonPressed();
    QPushButton::mousePressEvent(e);
}

void MyButton::mouseReleaseEvent(QMouseEvent *e)
{
    isPressed = false;
    QPushButton::mouseReleaseEvent(e);
}

I'm not sure, what exactly you are trying to achieve, but this idea should meet your needs.

You create a class, which inherits from QPushButton (or QAbstractButton) and override its mousePressEvent and mouseReleaseEvent. If you want some other widgets to react on this events, you emit signal and connect other widgets to that signal.

Dharman
  • 30,962
  • 25
  • 85
  • 135
George
  • 578
  • 4
  • 21
  • Thanks a lot for your answer! Now I got the basic idea of using QEvents. Just to add, my requirement to enable/disable the `QWidget` using mousePress/Rlease events (toggle Qwidget with mouse events). In this case what do you recommend? – tetra Aug 14 '20 at 10:21