首页 > 其他分享 >Qt键盘事件和鼠标事件的简单案例实现

Qt键盘事件和鼠标事件的简单案例实现

时间:2023-05-29 15:32:23浏览次数:50  
标签:界面 鼠标 mainwindow 事件 event Qt


事件:事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的统称。Qt中使用一个对象来表示一个事件,继承自QEvent类。
注意:事件与信号并不相同,事件与信号是两个不同层面的东西,发出者不同,作用也不同。

案例要实现的功能:

  1. 通过设置键盘的快捷键来切换另一个窗口
  2. 通过鼠标左键点击界面来改变窗口的大小(每点击一次窗口就会在变大和变小之间切换)。

案例实现的步骤:

1、功能1的实现

  1. 新建一个QWidget,然后再添加一个mainwindow类。
    在Main.cpp源文件中,将初次显示的界面更改为后来添加的Mainwindow:
#include "mainwindow.h"
QApplication a(argc, argv);
MainWindow w;
  1. 在mainwindow.h头文件中先对键盘事件函数声明:
#include "QKeyEvent"//添加键盘事件类
protected:      //键盘事件函数声明
    void keyPressEvent(QKeyEvent *event);
  1. 然后在mainwindow.cpp源文件中,重写之前在mainwindow.h头文件中的函数,设置键盘的事件,就是按下ctrl+N使得widget界面显示:
#include "widget.h"
void MainWindow::keyPressEvent(QKeyEvent *event){
    if(event->modifiers()==Qt::ControlModifier){
        if(event->key()==Qt::Key_N){
            Widget *w1=new Widget(this);//新建一个对象
            w1->show();
        }
    }
}
  1. 到这里利用键盘的快捷键来切换另一个窗口的事件就完成了,运行一下:
    初始界面如下:
  2. 按下ctrl+N 组合键,界面发生了变化:

    由于widget界面放到了mainwidow中了,没有单独产生一个界面,所以widget界面显示在了mainwidow界面中了,就像俄罗斯套娃一样套起来了。

2、功能2的实现

  1. 接下来实现另一个功能:
    在mainwindow.h头文件中进行鼠标事件函数声明:
#include "QMouseEvent"//添加鼠标事件类
protected:     //鼠标事件函数声明
    void mousePressEvent(QMouseEvent *event);
  1. 然后在mainwindow.cpp 头文件中对上面的函数进行重构:
void MainWindow::mousePressEvent(QMouseEvent *event){
    if(event->button()==Qt::LeftButton){//事件判断
        if(windowState()!=Qt::WindowFullScreen)
            setWindowState(Qt::WindowFullScreen);
        else
            setWindowState(Qt::WindowNoState);
    }
}
  1. 运行一下:
    运行初始界面:
  2. 在界面中点击鼠标左键:

    发现界面被最大化了,再次点击鼠标左键发现又恢复原来的大小了。


标签:界面,鼠标,mainwindow,事件,event,Qt
From: https://blog.51cto.com/u_14458591/6371470

相关文章

  • 事件抽取论文综述-A Survey on Deep Learning Event Extraction: Approaches and Appl
    ASurveyonDeepLearningEventExtraction:ApproachesandApplications1)发表信息:https://arxiv.org/abs/2107.02126QianLi,JianxinLi,Member,IEEE,JiaweiSheng,ShiyaoCui,JiaWu,SeniorMember,IEEE,YimingHei,HaoPeng,ShuGuo,LihongWang,Amin......
  • laravel 框架中的 事件 监听 和订阅
    真实举例老规矩假设我们需要在用户注册成功后发送一封欢迎邮件给用户首先定义事件App\Events\UserRegistered、App\Events\UserLogin然后定义一个监听器App\Listeners\SendWelcomeEmail然后添加一个订阅者App\Listeners\UserEventSubscriber简化版本Event::lis......
  • MQTT协议简介
    ##一、MQTT协议简介MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。![img.png](img.png)MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提......
  • Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能
    前言  前面实现了基础的跳转,那么动态交互中登录是常用功能。  本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术。 Demo  下载地址  链接:https://pan.baidu.com/s/1nkmsHgr-11Khe9k6Ntyf_g?pwd=1234 Html处理用户输入Sessi......
  • Qt线程简单使用一:QThread~创建线程类子类
     需求:点击QPushButton按钮,QLabel中的数字,不断累加,一直到999。 做法:点击QPushButton后,启动线程,线程while循环,不断发送累加的数字回主线程,修改QLabel中的数字 其他:这种线程的写法是最简单的,全部是Qt封装好的,只需要重写run函数就可以了。 主要代码://......
  • QT文件操作
    一、IO设备操作介绍TheQIODeviceclassisthebaseinterfaceclassofallI/OdevicesinQt.QIODeviceprovidesbothacommonimplementationandanabstractinterfacefordevicesthatsupportreadingandwritingofblocksofdata,suchasQFile,QBufferandQT......
  • Qt样式表踩坑小记
    在一个项目里使用样式表修饰界面,最终实现的效果不错,坑也踩了不少,浪费好几天时间。坑1:样式表的字符集。这个问题只在MSVC里出现,使用MinGW应该不会出现这个问题。qt的默认字符集是utf8,但msvc要求源码必须是ANSI或者带BOM的Utf8,所以一般我们在做msvc项目时,把Qt环境配置编辑器->文......
  • QT 绘制波形图、频谱图、瀑布图、星座图、眼图、语图
    说明最近在学中频信号处理的一些东西,顺便用QT写了一个小工具,可以显示信号的时域波形图、幅度谱、功率谱、二次方谱、四次方谱、八次方谱、瞬时包络、瞬时频率、瞬时相位、非线性瞬时相位、瞬时幅度直方图、瞬时频率直方图、瞬时相位直方图、眼图、星座图、语谱图、瀑布图。1.实......
  • QT 绘制波形图、频谱图、瀑布图、星座图、眼图、语图
    说明最近在学中频信号处理的一些东西,顺便用QT写了一个小工具,可以显示信号的时域波形图、幅度谱、功率谱、二次方谱、四次方谱、八次方谱、瞬时包络、瞬时频率、瞬时相位、非线性瞬时相位、瞬时幅度直方图、瞬时频率直方图、瞬时相位直方图、眼图、星座图、语谱图、瀑布图。目......
  • 【VS Code+Qt6】拖放操作
    由于老周的示例代码都是用VSCode+CMake+Qt写的,为了不误导人,在标题中还是加上“VSCode”好一些。上次咱们研究了剪贴板的基本用法,也了解了叫QMimeData的重要类。为啥要强调这个类?因为接下来扯到的拖放操作也是和它有关系。哦,对了,咱们先避开一下主题,关于剪贴板,咱们还要说......