0

我有一组小部件来控制五个相似位置(或通道)中的参数。

在此处输入图像描述

现在我可以使用按钮启用/禁用每个小部件,如下所示。

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);

我可以在上述场景中使用mousePressEvent/mouseReleaseEvent而不是使用吗?&QPushButton::clicked如果你能给我看一个例子,那将非常有帮助。

提前致谢

4

1 回答 1

1

一些代码可以帮助您入门。

我的按钮.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();
};

我的按钮.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);
}

我不确定你到底想达到什么目标,但这个想法应该能满足你的需求。

您创建一个类,该类继承自QPushButton(or QAbstractButton) 并覆盖其mousePressEventand mouseReleaseEvent。如果您希望其他一些小部件对此事件做出反应,则发出信号并将其他小部件连接到该信号。

于 2020-08-14T09:11:43.767 回答