如何连接到 mousePressEvent 插槽 Qt
How to connect to mousePressEvent slot Qt
在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);
}
在您的按钮中 class 将按钮向量更改为
QVector<MyButton*> buttons;
然后将您的 MyButton
的右键单击事件注册到 Buttons
中的信号 class 然后将信号转发到您的 mainWindow
connect(&mButtons, &Buttons::btnRightClicked,
this, &MainWindow::onRightClicked);
在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);
}
在您的按钮中 class 将按钮向量更改为
QVector<MyButton*> buttons;
然后将您的 MyButton
的右键单击事件注册到 Buttons
中的信号 class 然后将信号转发到您的 mainWindow
connect(&mButtons, &Buttons::btnRightClicked,
this, &MainWindow::onRightClicked);