Qt按钮自带的信号非常简单,并不能区分鼠标左右键,但是实际上Qt组件的功能很强大,只是将区分按键的功能隐藏了。 要实现这个功能,就需要自定义信号,然后重载mousePressEvent()函数。
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QObject>
#include <QPushButton>
#include <QMouseEvent>
class MyButton : public QPushButton {
Q_OBJECT
using QPushButton::QPushButton;
signals:
void leftButtonClicked();
void rightButtonClicked();
protected:
void mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::LeftButton)
emit leftButtonClicked();
if (event->button() == Qt::RightButton)
emit rightButtonClicked();
}
};
#endif
需要注意的几个细节:
- 必须要继承
QObject 类或它的子类,比如QWidget 、QPushButton 等。 - 宏
Q_OBJECT 必须写在类内部第一行。 - 信号函数写在宏
signals: 以下,信号函数可以有参数,信号函数没有实现。 - 类最好写成单独的
.h 文件。
|