gpt4 book ai didi

qt - 如何连接到 mousePressEvent 插槽 Qt

转载 作者:行者123 更新时间:2023-12-04 13:06:05 26 4
gpt4 key购买 nike

Class Buttons 中,我有一个 btnRightClicked 信号和一个 mousePressEvent 插槽:

void Buttons::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::RightButton) {
emit btnRightClicked();
}
}

mainwindow.cpp 中,我将 btnRightClicked 信号连接到 onRightClicked 插槽,如下所示:

connect(&mButtons, SIGNAL(btnRightClicked()), this, SLOT(onRightClicked()));

onRightClicked 插槽是这样的:

void MainWindow::onRightClicked()
{
qDebug() << "right clicked";
}

但是我运行了这个程序,没有任何反应。我猜是因为我没有连接到 mousePressEvent 插槽。我是 Qt 的新手,我不知道我是否正确。

我在中央小部件上设置了一些按钮,我希望它们在右键单击每个按钮时都有右键单击事件。那么我怎样才能使这项工作正常进行呢?

谢谢

编辑:在 button.h 中:

class Buttons : public QObject
{
Q_OBJECT
public:
Buttons();
QVector<QPushButton*> buttons;

void setButtons(int totalBtns) {
for(int i = 0; i < totalBtns; i++) {
buttons[i]->setObjectName(QString::number(i));
buttons[i]->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
}
}

public slots:
void mousePressEvent(QMouseEvent *e) {
if(e->button() == Qt::RightButton) {
emit btnRightClicked();
}
}

signals:
void btnRightClicked();
};

最佳答案

要让鼠标右键单击您的小部件,您需要实现自己的按钮小部件。

class MyButton : public QPushButton
{
Q_OBJECT

public:
MyButton(QWidget *parent = Q_NULLPTR);

private slots:
void mousePressEvent(QMouseEvent *e);

signals:
void btnRightClicked();
};

cpp

MyButton:MyButton(QWidget * parent) : 
QPushButton(parent)
{
}
void MyButton::mousePressEvent(QMouseEvent *e)
{
if(e->button()==Qt::RightButton)
emit btnRightClicked();

//this forwards the event to the QPushButton
QPushButton::mousePressEvent(e);
}

在您的按钮类中将按钮矢量更改为

 QVector<MyButton*> buttons;

然后将 MyButton 的右键单击事件注册到 Buttons 类中的信号,然后将信号转发到您的 mainWindow

connect(&mButtons, &Buttons::btnRightClicked,
this, &MainWindow::onRightClicked);

关于qt - 如何连接到 mousePressEvent 插槽 Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47465849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com