本文主要介绍QT中给控件如何添加鼠标相应事件,主要针对鼠标单击和双击实现。
项目目录如下
UI设计较为简单,直接在frame上面放置了一个label,说明一下,不用frame,直接将label放在widget上面也可以,不影响程序运行。
最后,直接上代码,很简单
项目文件没有添加任何东西,直接默认,此处不放代码和截图,剩下的代码依次附上。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLabel>
#include <QEvent>
#include <QPixmap>
#include <QImage>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
// 事件过滤器
bool eventFilter(QObject *watched, QEvent *event);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// 指定控件安装事件过滤器,此处以label为例
ui->label->installEventFilter(this);
}
Widget::~Widget()
{
delete ui;
}
// 通过给label安装事件过滤器实现鼠标的单击和双击功能
bool Widget::eventFilter(QObject *watched, QEvent *event)
{
// 给label添加鼠标单击事件
if(qobject_cast<QLabel*>(watched) == ui->label && event->type() == QEvent::MouseButtonPress){
QImage image;
image.load(":/image/2.jpg");
QPixmap pixmap = QPixmap::fromImage(image);
int width = 900;
int height = 600;
QPixmap fitpixmap = pixmap.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation); // 按比例缩放
ui->label->setPixmap(fitpixmap);
}
// 给label添加鼠标双击事件
if(qobject_cast<QLabel*>(watched) == ui->label && event->type() == QEvent::MouseButtonDblClick){
QImage image;
image.load(":/image/3.jpg");
QPixmap pixmap = QPixmap::fromImage(image);
int width = 900;
int height = 600;
QPixmap fitpixmap = pixmap.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation); // 按比例缩放
ui->label->setPixmap(fitpixmap);
}
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
main文件没有改动,直接默认,资源文件随便找个图片添加上去就可以。
上面代码复制后直接运行即可。
为了防止出错,也可以在下面链接中下载本项目,下载后直接运行,图片目录已经包含在程序文件中。
项目链接直达:
https://mp.csdn.net/mp_download/manage/download/UpDetailed