//自定义按钮控件
//头文件
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QPushButton>
class myButton : public QPushButton
{
Q_OBJECT
public:
explicit myButton(QWidget *parent = nullptr);
protected:
void mousePressEvent(QMouseEvent *e);
signals:
};
#endif // MYBUTTON_H
//源文件
#include "mybutton.h"
#include<QDebug>
#include<QMouseEvent>
myButton::myButton(QWidget *parent) : QPushButton(parent)
{
}
void myButton::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton)
{
//事件接收后就不会往下传递了
qDebug()<<QStringLiteral("左键被按下");
//e->ignore();//忽略,事件继续传递,事件传递给父组件,而不是给父类,传递给父组件就会执行myWidget::mousePressEvent(QMouseEvent *event)
}
else
{
//事件没有被接收
QPushButton::mousePressEvent(e);
}
}
//头文件
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class myWidget; }
QT_END_NAMESPACE
class myWidget : public QWidget
{
Q_OBJECT
public:
myWidget(QWidget *parent = nullptr);
~myWidget();
private:
Ui::myWidget *ui;
protected:
void mousePressEvent(QMouseEvent *event);
void closeEvent(QCloseEvent *e);
};
#endif // MYWIDGET_H
//源文件
#include "mywidget.h"
#include "ui_mywidget.h"
#include<QDebug>
#include<QPushButton>
#include<QMouseEvent>
#include<QMessageBox>
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::myWidget)
{
ui->setupUi(this);
connect(ui->pushButton,&myButton::clicked,[=](){qDebug()<<QStringLiteral("按钮被按下");});
}
myWidget::~myWidget()
{
delete ui;
}
void myWidget::mousePressEvent(QMouseEvent *event)
{
qDebug()<<"+++";
}
void myWidget::closeEvent(QCloseEvent *e)
{
int ret = QMessageBox::question(this,"question",QStringLiteral("是否关闭窗口?"));
if(ret == QMessageBox::Yes)
{
//关闭
//处理关闭窗口事件,被接收,事件不会再往下传递
e->accept();
}
else
{
//不关闭
//忽略事件,事件继续给父组件传递
e->ignore();
}
}
Qt--事件的接收和忽略
最新推荐文章于 2024-09-06 14:57:08 发布