1、新建Qt Gui应用,项目名称为“myEvent”,基类名称为QWidget,类名称为Widget。

2、widget.h文件中添加以下代码,该段代码中包含了三个事件函数和一个槽函数

 private:
int id1, id2, id3; protected:
void mousePressEvent(QMouseEvent *);
void keyPressEvent(QKeyEvent *);
void timerEvent(QTimerEvent *); private slots:
void timerUpdate();

3、在widget.ui中拖入一个pushButton(用来显示鼠标单击时的坐标)、两个textLabel(分别显示定时器1和定时器2到达计时点后的随机数和信息)和一个lineEdit(显示时间更新信息)

4、在widget.cpp中编写以下代码。

 #include "widget.h"
#include "ui_widget.h"
#include<QMouseEvent>
#include<QKeyEvent>
#include<QTimer>
#include<QDateTime> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
id1 = startTimer();
id2 = startTimer();
id3 = startTimer(); QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timerUpdate()));
timer->start(); qsrand(QTime(, , ).secsTo(QTime::currentTime()));//如果程序没有这句话,那么每次运行都会产生相同的随机数
} Widget::~Widget()
{
delete ui;
} void Widget::mousePressEvent(QMouseEvent *dot)
{
ui->pushButton->setText(tr("(%1, %2)").arg(dot->x()).arg(dot->y()));//dot为定义的鼠标事件变量
}
void Widget::keyPressEvent(QKeyEvent *btn)
{
int x = ui->pushButton->x();//pushButton的横坐标
int y = ui->pushButton->y();//pushButton的纵坐标
switch (btn->key())//btn为定义的键盘事件变量
{
case Qt::Key_W : ui->pushButton->move(x, y-); break;
case Qt::Key_S : ui->pushButton->move(x, y+); break;
case Qt::Key_A : ui->pushButton->move(x-, y); break;
case Qt::Key_D : ui->pushButton->move(x+, y); break;
}
if(btn->modifiers() == Qt::ControlModifier)// 是否按下Ctrl键
{
if(btn->key() == Qt::Key_M) // 是否按下M键
setWindowState(Qt::WindowMaximized); // 窗口最大化
else if(btn->key() == Qt::Key_N) // 是否按下N键
setWindowState(Qt::WindowNoState); // 窗口还原
}
else QWidget::keyPressEvent(btn);
}
void Widget::timerEvent(QTimerEvent *event)
{
if(event->timerId() == id1)
{
ui->label->setText(tr("%1").arg(qrand()%));//每次定时器1溢出时都产生一个小于10的随机数,循环计时
}
else if(event->timerId() == id2)
{
ui->label_2->setText(tr("Hello"));
}
else if(event->timerId() == id3)
{
qApp->quit();
}
}
void Widget::timerUpdate()
{
QDateTime time = QDateTime::currentDateTime();
QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
ui->lineEdit->setText(str);
ui->lineEdit->setAlignment(Qt::AlignCenter);
}

5、程序运行结果显示如下,其中,textLabel每隔1秒产生一个10以内的随机数,且每次运行产生的随机数顺序不一样。textLabel_2每隔5秒更新信息,由于程序中设置的字符未发生变化,因此,一直显示Hello,lineEdit显示时间信息,并且没每隔1s刷新一次。程序运行10s后,满足计时器3的条件,自动退出。

初识Qt鼠标、键盘事件及定时器和随机数的更多相关文章

  1. 【转】Qt鼠标键盘事件

    http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...

  2. Qt之键盘事件监听-实时响应大小写Capslock按键

    目录 一.开篇 二.效果展示 三.实现思路 1.重写QLlinEdit 2.全局应用程序事件 3.windows钩子 四.相关文章 原文链接:Qt之键盘事件监听-实时响应大小写Capslock按键 一 ...

  3. Linux 模拟 鼠标 键盘 事件

    /************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: ...

  4. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  5. Python - selenium_WebDriver 鼠标键盘事件

    from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_cha ...

  6. Tkinter 鼠标键盘事件(一)

    一: 鼠标事件 <Button-1>                                                                     鼠标左键单击 ...

  7. Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)

    一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...

  8. QT 11 鼠标键盘事件添加

    鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 ...

  9. 【PyQt5-Qt Designer】鼠标+键盘事件

    重定义鼠标响应+键盘响应事件 一,每个事件都被封装成相应的类: pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等.而它们的基类是QEv ...

随机推荐

  1. JS实现继承的几种方式以及优缺点(转载)

    前言 JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一.那么如何在JS中实现继承呢?让我们拭目以待. JS继承的实现方式 既然要实现继承,那么首先我们得有一个父类,代码如下: // 定义一个 ...

  2. MQ之如何做到消息幂等 (转 优秀)

    一.缘起 MQ消息必达,架构上有两个核心设计点: (1)消息落地 (2)消息超时.重传.确认 再次回顾消息总线核心架构,它由 发送端.服务端.固化存储.接收端 四大部分组成. 为保证消息的可达性,超时 ...

  3. c#设计模式·结构型模式

    看的过程中,发现好多模式都用过,只是没有总结,或者是不知道叫这个名字吧··· 这里列举结构型模式,适配器.桥接.过滤.组合.装饰器.外观.享元.代理, 适配器模式:将现存的对象放到新的环境里边去,但是 ...

  4. 第二十四天- 模块导入 import from xxx import xxx

    # 模块:# 模块就是⼀个包含了python定义和声明的⽂件,⽂件名就是模块的名字加上.py后缀# 换句话说我们⽬前写的所有的py⽂件都可以看成是⼀个模块# 为何用模块:写大项目时,把相关的功能进⾏分 ...

  5. js设置光标插入文字和HTML

    原文链接:js设置光标插入文字和HTML 在一个textarea的某个光标位置插入文字或者在某个编辑器中插入图片html内容,我最近经常和这些打交道,但总是一团模糊,今天整理一下关于如何插入文字,设置 ...

  6. JS计算字符串长度(兼容后端PHP)

    /*** 计算字符串长度* 参数是要计算的字符串* 返回值当前字符串的长度*/function charactersLen (words) { let tempMapWordNum = {} let ...

  7. Ubuntu加入opencv库的环境变量

    1.用gedit打开/etc/ld.so.conf 终端输入: sudo gedit /etc/ld.so.conf 文件末行加入:include /usr/loacal/lib .然后终端执行指令: ...

  8. android studio 加载libs

    eclipse 项目转 android studio libs  不能加载 导致不能导入 记录下:libs 放在和src 同路径 dependencies:增加 compile files('libs ...

  9. Scala + Thrift+ Zookeeper+Flume+Kafka配置笔记

    1. 开发环境 1.1. 软件包下载 1.1.1. JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...

  10. Burp Suite插件推荐

    BurpSuiteHTTPSmuggler 网址 https://github.com/nccgroup/BurpSuiteHTTPSmuggler 作用 利用 中间件对 HTTP 协议的实现的特性 ...