文档章节

QLabel使用事件过滤器实现鼠标单击事件

A
 AIU_zxyf
发布于 08/13 19:39
字数 290
阅读 0
收藏 0
Qt
QLabel使用事件过滤器实现鼠标单击事件

在开发过程中,需要对QLabel控件对鼠标按键响应,但QLabel类没有clicked()信号,因此使用事件过滤器,实现QLabel与鼠标的交互,代码如下:

//mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QLabel>
#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    QLabel *label;

    bool eventFilter(QObject *obj, QEvent *event);

};

#endif // MAINWINDOW_H
//mainwindow.cpp
#include <QMouseEvent>
#include<QMessageBox>

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    label = new QLabel(this);

    label->installEventFilter(this);

    label->setGeometry(230, 100, 200, 50);
    label->setText("this is test!");

}

MainWindow::~MainWindow()
{
    delete ui;
}

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == label)
    {
        if(event->type() == QEvent::MouseButtonPress)
        {
            QMouseEvent *mouseevent = static_cast<QMouseEvent *>(event);
            if(mouseevent->buttons() == Qt::LeftButton)
            {
                QMessageBox::information(NULL, "eventFilter", "label leftbutton success!", QMessageBox::Ok|QMessageBox::No, QMessageBox::Ok);
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    else
    {
        return QMainWindow::eventFilter(obj, event);
    }

}

运行效果如下: QLabel使用事件过滤器实现单击事件

© 著作权归作者所有

A
粉丝 0
博文 5
码字总数 1388
作品 0
西安
程序员
私信 提问
Qt之实现360安全卫士主界面(四)

这篇博文主要讲解360安全卫士标题栏的创建。关于标题栏,我想大家应该都非常熟悉了,其主要包括窗口关闭、最大化/还原、最小化等按钮;但是标题栏的这些按钮都是非常有特色的。 在我写这篇博...

长平狐
2012/11/06
1K
0
继承QLabel后重载鼠标事件后图片显示不正常

下图是未继承时显示的 下面是继承后添加鼠标单击动作后显示的, 继承的后只添加了事件处理和处理函数,及相关信号动。构造函数是这样的: ImageLabel(QLabel *parent); 初始化是使用在相关...

锋了
2014/12/16
1K
14
Qt日记(1)-360新版特性界面实现(1)

Qt日记开篇,没啥特别的意思,像写日记的方式一样来记录Qt的一些琐事。作为中国众多程序猿中的一名成员,我感到很"荣幸"。 工作当中,经常遇到一些小问题,却花费了一些小时间,在网上搜索答...

晨曦之光
2012/05/24
1K
0
QT的父子Widget之间消息的传递

以前我一直以为:在父widget上摆一个子widget后,当click子widget时:只会进入到子widget的相关事件处理函数中,比如进入到mousePressEvent()中, 而不会进入到父widget的对应事件处理函数中...

晨曦之光
2012/04/13
522
0
Qt日记(2)-360新版特性界面实现(2)

1.UI的结构 开始画图形界面,首先确定UI的大小,找到360新版特性界面的皮肤,可以看到: 4个不同的页面的像素为:680 * 370 而最顶层的一层透明页面像素为:680 * 372 如图: QSize(680, 370...

晨曦之光
2012/05/24
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部