c++ qt--事件(第六部分)

c++ qt–事件(第六部分)

一.编辑伙伴,编辑顺序(按TAB进行切换)

1.编辑伙伴

此功能在设计界面如下的位置

在这里插入图片描述

1.设置伙伴关系

在这里插入图片描述

鼠标左键长按一个Label组件然后把鼠标移到另一个组件上

2.伙伴关系的作用

伙伴关系的作用就是可以设置快捷键,通过快捷键直接定位到某个组件

3.添加快捷键

在这里插入图片描述

4.使用快捷键

ALT+设置快捷键的字符

qt中上面的菜单栏也可以用alt+相应的字符进行使用

在这里插入图片描述

2.编辑顺序

此功能在设计界面如下的位置

在这里插入图片描述

1.设置编辑顺序

直接用鼠标左键点排序的方块即可,先点的顺序就靠前

在这里插入图片描述

在这里插入图片描述

3.进行切换

按TAB键即可进行编辑对象的切换(按顺序切换)

二.事件

1.什么是事件

事件是由系统或Qt本身在不同的时刻发出的。

事件是信号的前驱(事件驱动信号)

如果使用组件,关心的是信号槽;如果使用自定义组件,关心的是事件

2.关于事件的第一个例子 监控鼠标状态(用事件来进行监控)

1.用到的组件如下

在这里插入图片描述

2.重写事件(虚函数重写)

1.创建一个文件,用来重写事件(虚函数重写)

在这里插入图片描述

在这里插入图片描述

2.修改类

在创建的文件的头文件进行的修改

在这里插入图片描述

在创建的文件的源文件进行的修改

在这里插入图片描述

3.重写事件(虚函数重写)

在创建的文件的头文件的类中写下面代码

//声明
public:
     void mousePressEvent(QMouseEvent *ev) override;//override是判断是否重写了父类的虚函数,注意qt中的虚函数的函数名是斜体的
     void mouseMoveEvent(QMouseEvent *ev) override;
     void mouseReleaseEvent(QMouseEvent *ev) override;

在创建的文件的源文件中写下面代码

mylabel1::mylabel1(QWidget *parent) : QLabel(parent)//构造函数
{
    this->setMouseTracking(true);//鼠标默认不追踪,这里设置鼠标默认追踪

}

//button 触发当前时间的按钮
//button 当前时间发生时,哪些按键时按下的
//定义
void mylabel1::mousePressEvent(QMouseEvent *ev){
    if(ev->button()==Qt::LeftButton){//如果是鼠标左键按下
        QString s=QString("鼠标左键按下:%1,%2").arg(ev->x()/*获取横坐标*/).arg(ev->y()/*获取纵坐标*/);
        this->setText(s);
    }
}

void mylabel1::mouseMoveEvent(QMouseEvent *ev){
    QString s;
    if(ev->buttons()==(Qt::LeftButton|Qt::RightButton)){//鼠标左键和按键都按下了
        s=QString("鼠标左右键:%1,%2").arg(ev->x()).arg(ev->y());//获取坐标
    }
    else if(ev->buttons()==(Qt::NoButton)){//鼠标左键和右键都按下了
        s=QString("没有按键:%1,%2").arg(ev->x()).arg(ev->y());//获取坐标
    }
      this->setText(s);
}

void mylabel1::mouseReleaseEvent(QMouseEvent *ev){

    if(ev->button()==Qt::RightButton){//鼠标右键 释放
        QString s=QString("鼠标右键释放:%1,%2").arg(ev->x()).arg(ev->y());//获取坐标
        this->setText(s);
    }
}
4.将子类与组件进行绑定

在这里插入图片描述

在这里插入图片描述

3.关于事件的第二个例子 输入电话号码 只能输入数字且只能是11位(用事件来进行监控)

1.用到的组件如下

在这里插入图片描述

2.重写事件(虚函数重写)

1.创建一个文件,用来重写事件(虚函数重写)

在这里插入图片描述

在这里插入图片描述

2.修改类

在创建的文件的头文件进行的修改

在这里插入图片描述

在创建的文件的源文件进行的修改

在这里插入图片描述

3.重写事件(虚函数重写)

在创建的文件的头文件的类中写下面代码

//声明
public:
     //事件 分发
     bool event(QEvent *) override;

     //事件处理器 event handler
     void keyPressEvent(QKeyEvent *) override;

在创建的文件的源文件中写下面代码

//定义
bool myLineEdit::event(QEvent * ev)
{
    if(ev->type()/*判断事件的类型*/==QEvent::KeyPress){ //如果当前事件类型为键盘按下事件
        QKeyEvent* pKey=(QKeyEvent*)ev;//强转为某个具体的事件

        int key=pKey->key();//获取按下的那个按键
        if((Qt::Key_0<=key&&key<=Qt::Key_9)||key==Qt::Key_Backspace){//如果是数字,则放行
            qDebug()<<"event 放行 "<<key;
            return QLineEdit::event(ev);//继续走分发
        }

        else{//拦截
             qDebug()<<"event 拦截 "<<key;
             if(key==Qt::Key_Return){//Key_Return:字母区的回车, Key_Enter:数字小键盘的回车
                 QMessageBox::information(this,"电话号码",m_strTel);//弹出提示框,显示输入的电话号码
             }
            //return true;//当前事件已经得到了处理,不会继续分发了
            return false;//当前事件 当前的组件处理不了,交由父窗口继续处理
        }
    }
     return QLineEdit::event(ev);//其他类型的事件继续走分发
}

void myLineEdit::keyPressEvent(QKeyEvent * pKey)
{
     qDebug()<<"keyPressEvent="<<pKey->key();

     if(pKey->key()==Qt::Key_Backspace){//如果是backspace键
         //m_strTel是定义在类中的属性,公有的属性
        m_strTel= m_strTel.left(m_strTel.size()-1);//截取
        QString stel=text();
        setText(stel.left(stel.size()-1));
     }
     else if(m_strTel.size()<11){//对显示的电话号码中间四位进行加密处理
         m_strTel+=QString::number(pKey->key()-Qt::Key_0);

         if(m_strTel.size()<=3){
             setText(m_strTel);
         }
         else if(m_strTel.size()>3&&m_strTel.size()<7){
             QString s=m_strTel.left(3);
             for(int i=3;i<m_strTel.size();i++){
                 s+="*";
             }
              setText(s);
         }
         else{
              QString s=m_strTel.left(3)+"****"+m_strTel.right(m_strTel.size()-7);
              setText(s);
         }
     }
}
4.将子类与组件进行绑定

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用proxman对iOS真机进行抓包

1 打开手机的safari 输入地址 http://proxy.man/ssl 2 下载证书代开设置页面&#xff0c;安装证书 设置信任证书 打开手机设置 &#xff0c;点击通用 点击关于本机、 点击证书信任设置 打开信任设置开关 4 设置手机代理 查看需要设置的代理地址 打开界面 在手机中按…

c语言练习题32:模拟实现库函数strlen并求字符串长度

模拟实现库函数strlen&#xff0c;读取字符个数。 思路&#xff1a;利用指针遍历字符串&#xff0c;从而获得字符串中的字符个数。 代码&#xff1a; //模拟实现库函数strlen #include<stdio.h> int Strlen(const char* str) {int count 0;//利⽤指针遍历字符串while…

Git拉取分支、基于主分支创建新的开发分支、合并开发分支到主分支、回退上一次的merge操作

系列文章目录 第1章 Git拉取分支、基于主分支创建新的开发分支、合并开发分支到主分支、回退上一次的merge操作 文章目录 系列文章目录一、拉取分支二、如何从master分支创建一个dev分支三、如何将dev分支合并到master分支四、如何回退上一次的merge 一、拉取分支 项目文件夹…

用大白话来讲讲多线程的知识架构

感觉多线程的知识又多又杂&#xff0c;自从接触java&#xff0c;就在一遍一遍捋脉络和深入学习。现在将这次的学习成果展示如下。 什么是多线程&#xff1f; 操作系统运行一个程序&#xff0c;就是一个线程。同时运行多个程序&#xff0c;就是多线程。即在同一时间&#xff0…

Maven导入包

有些时候maven导入不进去包&#xff0c;这个时候可以去直接去maven仓库找到你需要的包 https://mvnrepository.com/ 在自己本地输入命令 &#xff08;这只是一个样例&#xff0c;请根据自己需要的包参考&#xff09; mvn install:install-file -Dfile"C:/Users//Downloa…

如何保障Facebook账号登录稳定

当谈到保障Facebook账号的稳定性时&#xff0c;我们不得不提到那些令人头疼的情况——Facebook账号被封。尽管我们已经踏入数字化的未来&#xff0c;但是被封号似乎是一个时常困扰着社交媒体用户的问题。那么&#xff0c;让我们来看看一些常见的Facebook账号被封的原因&#xf…

【PyQt】下载文件时弹出提示用户选择保存文件位置的对话框

1 需求 在界面软件中&#xff0c;用户点击下载某个文件&#xff0c;此时软件需要提示用户选择保存到电脑的某个位置&#xff0c;然后软件才能将文件保存到用户指定的电脑文件夹中。 2 代码 # 需引入的库 import os import sys from PyQt5.QtWidgets import QFileDialogsrc .…

Redis7之介绍(一)

1. 是什么 Redis:REmote Dictionary Server(远程字典服务器&#xff09; Remote Dictionary Server( 远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库提供了丰富的数据结构&#xff0c;例如String、Hash、List、…

回归预测 | MATLAB实现GA-ELM遗传算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GA-ELM遗传算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GA-ELM遗传算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍程序…

分布式定时任务框架Quartz总结和实践(2)—持久化到Mysql数据库

本文主要介绍分布式定时任务框架Quartz集成SpringBoot持久化数据到Mysql数据库的操作&#xff0c;上一篇文章使用Quartz创建定时任务都是保存在内存中&#xff0c;如果服务重启定时任务就会失效&#xff0c;所以Quartz官方也提供将定时任务等信息持久化到Mysql数据库的功能&…

Python Jail 沙盒逃逸 合集

原理 沙箱是一种安全机制&#xff0c;用于在受限制的环境中运行未信任的程序或代码。它的主要目的是防止这些程序或代码影响宿主系统或者访问非授权的数据。 在 Python 中&#xff0c;沙箱主要用于限制 Python 代码的能力&#xff0c;例如&#xff0c;阻止其访问文件系统、网…

开始MySQL之路——MySQL约束概述详解

MySQL约束 create table [if not exists] 表名(字段名1 类型[(宽度)] [约束条件] [comment 字段说明],字段名2 类型[(宽度)] [约束条件] [comment 字段说明],字段名3 类型[(宽度)] [约束条件] [comment 字段说明] )[表的一些设置]; 概念 约束英文&#xff1a;constraint 约束实…

Jacoco XML 解析

1 XML解析器对比 1. DOM解析器&#xff1a; ○ 优点&#xff1a;易于使用&#xff0c;提供完整的文档树&#xff0c;可以方便地修改和遍历XML文档。 ○ 缺点&#xff1a;对大型文档消耗内存较多&#xff0c;加载整个文档可能会变慢。 ○ 适用场景&#xff1a;适合小型XML文档…

数组习题答案

基础题目 第一题&#xff1a;需求实现 模拟大乐透号码&#xff1a; 一组大乐透号码由10个1-99之间的数字组成定义方法&#xff0c;打印大乐透号码信息 代码实现&#xff0c;效果如图所示&#xff1a; 开发提示&#xff1a; 使用数组保存录入的号码 参考答案&#xff1a; p…

使用 SQLStudio 进行数据库管理并通过 Docker Compose 进行部署

在现代软件开发中&#xff0c;数据库管理是一个至关重要的环节。SQLStudio 是一个强大的工具&#xff0c;可以帮助开发人员轻松管理数据库&#xff0c;现在改名成SQLynx&#xff0c;我们用的是旧的镜像&#xff0c;本文还是用SQLStudio这个名称。同时&#xff0c;使用 Docker C…

live555server环境搭建

live555环境搭建详解&#xff08;ubuntu18.04&#xff09; 1.环境依赖 openssl可选安不安 安装&#xff08;选择好版本&#xff09; sudo apt-get update sudo apt-get install openssl sudo apt-get install libssl-dev使用头文件是否可用时编译测试时记得链接&#xff08…

【Go 基础篇】Go语言中的数组:初识与应用

Go语言以其简洁、高效和强大的特性在编程界广受欢迎。数组作为一种基本的数据结构&#xff0c;在各种应用场景中扮演着重要角色。本文将引入Go语言中的数组&#xff0c;介绍其特点、创建、初始化以及基本应用&#xff0c;为你打开数组的大门。 前言 数组是一种固定大小的数据…

c++ qt--事件过滤(第七部分)

c qt–事件过滤&#xff08;第七部分&#xff09; 一.为什么要用事件过滤 上一篇博客中我们用到了事件来进行一些更加细致的操作&#xff0c;如监控鼠标的按下与抬起&#xff0c;但是我们发现如果有很多的组件那每个组件都要创建一个类&#xff0c;这样就显得很麻烦&#xff…

学习设计模式之享元模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 享元模式 1 介绍 享元模式很好理解&#xff0c;它主要是为了减少创建对象的数量&#xff0c;属于结构型设计模式 目的&#xff1a;减少…

高效多用的群集-Haproxy搭建Web集群

Haproxy搭建 Web 群集 一、Haproxy前言 HAProxy是一个使用c语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TcP和HrrP的应用程序代理。HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理。…