Qt按钮自带的信号非常简单,并不能区分鼠标左右键,但是实际上Qt组件的功能很强大,只是将区分按键的功能隐藏了。
要实现这个功能,就需要自定义信号,然后重载mousePressEvent()函数。
//
// Created by w on 2022/4/7.
//
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QObject>
#include <QPushButton>
#include <QMouseEvent>
/**
* 由于原有的QPushButton类不能分辨鼠标左右键点击事件,这里需要继承它然后自定义两个信号。
*/
class MyButton : public QPushButton {
//Q_OBJECT 是一个宏,添加它才能正常使用 Qt 的信号和槽机制
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 //MYBUTTON_H
需要注意的几个细节:
- 必须要继承
QObject类或它的子类,比如QWidget、QPushButton等。 - 宏
Q_OBJECT必须写在类内部第一行。 - 信号函数写在宏
signals:以下,信号函数可以有参数,信号函数没有实现。 - 类最好写成单独的
.h文件。
版权声明:本文为ashtyukjhf原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。