QT学习笔记(十五):QLabel的点击事件(clicked)添加

QT学习笔记(十五):QLabel的点击事件(clicked)添加

Qt之添加QLabel的点击事件
QLabel功能为显示了一个字符串或者图片等信息,它本身没有click信号。也就不能够响应click点击事件,有什么办法来实现来,我们可以:

第一种方法:使用eventFilter事件过滤器

在这里插入图片描述
1)头文件添加:

#include <QMouseEvent>public:bool eventFilter(QObject *obj, QEvent *event);	// 添加时间过滤器声明

2)构造函数添加:

myWidget::myWidget(QWidget *parent) :QWidget(parent),ui(new Ui::myWidget)
{ui->setupUi(this);ui->label->installEventFilter(this);    // 安装事件过滤器//    QFont font ;
//    font.setFamily("微软雅黑"); //字体
//    font.setBold(true);  //加粗
//    font.setItalic(true);    //斜体
//    font.setStrikeOut(false); //删除线
//    font.setUnderline(true);   //下划线
//    font.setPointSize(23);   //字体大小
//    ui->label->setFont(font);// 修改标签文本格式ui->label->setText(tr("点击加载图片..."));ui->label->setFont(QFont("微软雅黑",20,QFont::Bold,true));//ui->label->setStyleSheet("color:blue");  //文本颜色(前景色)ui->label_1->setStyleSheet("color:blue; background-color:lightGray;");//设置文本颜色+背景颜色(前景色)
}

3)事件过滤器:

bool myWidget::eventFilter(QObject *obj, QEvent *event)
{if (obj == ui->label)//指定某个QLabel{if (event->type() == QEvent::MouseButtonPress) //鼠标点击{QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); // 事件转换if(mouseEvent->button() == Qt::LeftButton){......  // 添加代码......	// 添加代码return true;}else{return false;}}else{return false;}}else{// pass the event on to the parent classreturn QWidget::eventFilter(obj, event);}
}

第二种方法:子类化QLabel+提升窗口部件,重写事件处理函数 mousePressEvent()或event()

1)mylabel.h 添加:

#include <QLabel>
#include <QMouseEvent>class myLabel : public QLabel
{Q_OBJECT
public:explicit myLabel(QWidget *parent = 0);protected:virtual void mousePressEvent(QMouseEvent *event);	// 重新声明 mousePressEvent 处理函数protected:virtual bool event(QEvent *e);	// 声明 event()函数  
}

2)mylabel.cpp 添加:

#include "mylabel.h"
#include <QMessageBox>// 重写鼠标点击事件 mousePressEvent()
void myLabel::mousePressEvent(QMouseEvent *event)
{//Qt::LeftButton//Qt::RightButtonif(event->button()== Qt::LeftButton){QMessageBox::information(NULL,"单击","单击了我", QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);}
}
// 重写鼠标事件处理 event()
bool myLabel::event(QEvent *e)
{if (e->type() == QEvent::MouseButtonPress){QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(e);if(mouseEvent->button() == Qt::LeftButton){QMessageBox::information(NULL,"单击","单击了我",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);return true;}}return QLabel::event(e);
}

第三种方法:信号与槽+提升窗口部件

1)mylabel.h 添加:

#include <QLabel>
#include <QMouseEvent>class my_Label : public QLabel
{Q_OBJECT
public:explicit my_Label(QWidget *parent = 0);	// 构造函数声明
protected:virtual void mouseReleaseEvent(QMouseEvent * ev);  // 声明鼠标左键点击事件
signals:void clicked(void); // 声明鼠标左击中信号};

2)mylabel.cpp 添加:

#include "mylabel.h"my_Label::my_Label(QWidget *parent):QLabel(parent)
{}// 重写鼠标释放时间 mouseReleaseEvent()
void my_Label::mouseReleaseEvent(QMouseEvent *ev)
{Q_UNUSED(ev)if(ev->button() == Qt::LeftButton){emit clicked();	// 发射信号}
}

3)Widget.h头文件

#include "mylabel.h"private slots:void onClicked(); // 添加槽声明

4)Widget.cpp源文件

#include "myLabel.h"
#include <QMessageBox>// 构造函数添加
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);// 槽信号关联://QObject::connect(ui->label, SIGNAL(clicked()), this, SLOT(onClicked()));	QObject::connect(ui->label, &my_Label::clicked, this, &Widget::onClicked);
}// 槽函数:
void Widget::onClicked()
{	..............ui->pushButton_1->click();  // 关联pushButton_1按钮点击事件ui->pushButton_2->click();	// 关联pushButton_2按钮点击事件QMessageBox::information(NULL,"单击","单击了我",QMessageBox::Yes);
}

5)最后在设计模式提升窗口部件“label”为“myLabel”类。

PS:实际上一个完整的click点击事件,要处理down,move,releae三个事件。

代码需要加上以下内容:

...
public void MouseDownEvent(...)
public void MouseUpEvent(...)
public void MouseMoveEvent(...)
...

6)QT中发送鼠标点击事件

	QPoint pos=QPoint(5,5);QMouseEvent ev(QEvent::MouseButtonPress,pos,Qt::LeftButton,Qt::LeftButton, Qt::NoModifier);QCoreApplication::sendEvent(ui->pushButton,&ev);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

引用文献管理软件Mendeley

Mendeley是一款强大的文献管理软件&#xff0c;只需要把引用的文献导入进去&#xff0c;就可以生成各种风格的文献引用格式 首先去官网下载Mendeley&#xff1a;https://www.mendeley.com/download-desktop/ 安装好&#xff0c;打开后点击add添加文献&#xff1a; 添加文献的方…

​忆阻器会成为“存储墙”的破局者么

来源&#xff1a;半导体行业观察在计算量和数据量变得越来越大的今天&#xff0c;计算和存储成为了下一步科技发展中要面临的两座大山&#xff0c;下一代高性能计算机系统必须突破存储墙问题。在过去&#xff0c;这两者一直都是各自发展&#xff0c;再通过下游产品产生交集。但…

Halcon学习笔记(一):Qt+Halcon联合开发配置

Halcon学习笔记(1)&#xff1a;QtHalcon联合开发配置 首先是新建一个QT项目qtest_hc 方法一&#xff1a; 1)QT项目文件 qtest_hc 添加库&#xff1a; #1.包含目录添加 INCLUDEPATH D:/MVTec/HALCON-13.0/include INCLUDEPATH D:/MVTec/HALCON-13.0/include/halconcpp#2.链…

Elsevier LaTeX时间-年份(author-year)两种引用格式

Elsevier的时间-年份&#xff08;author-year&#xff09;引用格式有两种 假如现在需要用author-year格式引用一篇文献&#xff0c;首先在LaTeX文件开头加入这一句&#xff1a; \documentclass[preprint,12pt,authoryear]{elsarticle} 然后把这篇文献写成author-year格式&…

C1. 组队活动 Small(BNUOJ)

C1. 组队活动 SmallTime Limit: 1000msMemory Limit: 131072KB64-bit integer IO format: %lld Java class name: MainSubmit Status PID: 51280BNU ACM校队一共有名队员&#xff0c;从到标号&#xff0c;现在名队员要组成若干支队伍来相互学习、共同进步&#xff0c;为了…

窥见人工智能四十年 2019 CCF-GAIR全球人工智能与机器人峰会今日开幕

编者按&#xff1a;7月12日-14日&#xff0c;2019年全球人工智能与机器人峰会&#xff08;CCF-GAIR&#xff09;正式开幕&#xff0c;该峰会由中国计算机学会&#xff08;CCF&#xff09;主办&#xff0c;雷锋网、香港中文大学&#xff08;深圳&#xff09;承办&#xff0c;深圳…

QT学习笔记:常用快捷键总结表

编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助&#xff08;选中某一类或函数&#xff0c;按下F1&#xff0c;出现帮助文档&#xff09; 3 F2 在光标选中对象的声明和定义之间切换&#xff08;和Ctrl鼠标左键一样的效果&#xff0c;选中某一类或函数&#xff0c;按下…

神经网络的反向传播推导实例

假设&#xff0c;你有这样一个网络层&#xff1a; 第一层是输入层&#xff0c;包含两个神经元i1&#xff0c;i2&#xff0c;和截距项b1&#xff1b;第二层是隐含层&#xff0c;包含两个神经元h1,h2和截距项b2&#xff0c;第三层是输出o1,o2&#xff0c;每条线上标的wi是层与层之…

linux系统命令:yum和apt-get

转&#xff1a;http://my.oschina.net/liuyuanyuangogo/blog/546850 1.linux系统分类 一般来说著名的linux系统基本上分两大类&#xff1a; RedHat系列&#xff1a;Redhat、Centos、Fedora等 Debian系列&#xff1a;Debian、Ubuntu等 2.常见安装包 2.1 RedHat系列 1 常见…

AI赌神升级!无惧bluff,6人局德扑完胜世界冠军,训练只用了8天

大数据文摘出品2017年年初&#xff0c;Brain vs AI的德州扑克人机大战在卡耐基梅隆大学(CMU)落幕&#xff0c;由4名人类职业玩家组成的人类大脑不敌人工智能程序Libratus。获胜后人类还遭到了Libratus的无情嘲讽。但是那时候Libratus还只是个只能在1V1局里称霸的超级玩家&#…

pytorch报错RuntimeError: error in LoadLibraryA

这是因为腾讯管家把某个文件当成病毒删除了&#xff0c;恢复该文件即可 恢复腾讯管家杀毒误删文件方法&#xff1a; https://jingyan.baidu.com/article/6766299763dab854d41b8457.html

OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse()

OpenCV示例学习&#xff08;二&#xff09;&#xff1a; 基本图形绘制算子&#xff1a;line(),circle(),fillPoly(), ellipse() #include <opencv2/opencv.hpp>using namespace cv;#define WINDOW_NAME1 "【绘制图1】" //为窗口标题定义的宏 #define W…

BZOJ-1901 Zju2112 Dynamic Rankings 函数式线段树 套 树状数组+离线处理

1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6058 Solved: 2521 [Submit][Status][Discuss] Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n]&#xff0c;程序必须回答这样的询问&#xff1a;对于给定的i,j,k&#xff0c…

动荡的 2019:数据和 AI 生态圈

来源&#xff1a;云头条这是数据领域又一个激烈动荡的年头&#xff0c;令人兴奋&#xff0c;但又错综复杂。随着越来越多的人上网&#xff0c;一切继续在加快“数据化”的步伐。这个大趋势的发展势头越来越猛&#xff0c;归因于基础设施、云计算、AI和开源各个领域取得的进步的…

卸载pytorch

1、使用conda卸载Pytorch conda uninstall pytorch conda uninstall libtorch2、使用pip卸载Pytorch pip uninstall torch 如果当初是用conda install 命令安装的pytorch&#xff0c;则用第一种方法&#xff0c;如果是用pip install命令安装的&#xff0c;则用第二种方法。或…

无线通信界的3大天王,谁能驾驭百亿台IoT设备?

来源&#xff1a;物联网智库导 读数量爆发式增长的背后&#xff0c;Wi-Fi、蓝牙、Zigbee三大无线连接技术正上演一场“争霸赛”。本文通过对三项技术的详细对比&#xff0c;以分析三项技术在具体应用场景中的优劣势。根据前瞻产业研究院发布的《2018—2023年中国物联网行业细分…

Python删除文件夹和建立文件夹

import os import shutilif os.path.isdir(dir): #判断文件夹dir是否存在shutil.rmtree(dir, True) #删除文件夹dir os.mkdir(dir) #建立文件夹dir

C++使用流进行输入输出

首先应用 #include <iostream> #include <iomanip> 1.进制读写 int val10;//十进制数 cout<<"输出8进制"<<oct<<val<<endl; cout<<"输出16进制"<<hex<<val<<endl; cout<<"输出10进…

C++学习:两个vector对象拼接

C学习&#xff1a;两个vector对象拼接 方法一&#xff1a;insert() 函数 方法二&#xff1a;重载一下号运算符 方法三&#xff1a;copy()函数 #include <iostream> #include <vector>using namespace std;// 重载一下号运算符 template <typename T> vecto…

TypeError: 'numpy.ndarray' object is not callable

取ndarray的某几个数&#xff0c;若写为&#xff1a; a np.array([0,1,2,3,4,5,6]) index np.array([1,2,3]) b a(index) print(b) 则会报错TypeError: numpy.ndarray object is not callable 正确写法为&#xff1a; a np.array([0,1,2,3,4,5,6]) index np.array([1,…