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. 移动端实现上拉加载更多(使用dropload.js vs js)

    做下笔记,:移动端实现上拉加载更多,其实是数据的分段加载,在这里为了做测试我写了几个json文件作为分段数据: 方式一:使用dropload.js; 配置好相关参数及回调函数就可使用:代码如下 var ...

  2. html基础-表格-列表(4)

    今天准备为大家准备了表格和列表. 一.文章有各种数据的表格这个网页也不例外. (1).标签意思 <table>----------------------表格开始 <caption& ...

  3. Json反序列化为动态类型(dynamic)

    方法(依赖于Newtonsoft.Json): /// <summary> /// 反序列化json字符串 /// </summary> /// <typeparam n ...

  4. iis配置asp.net常见问题解决方案

    很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的,俺忙活了一下午,做 了很多次试验,结合以前的排错经验,做出了这个总结,希望能给大家帮上忙:) ...

  5. Android微信支付—注意事项

    坑点一:PayReq的参数 sign的生成 PayReq对象有个参数为packageValue 而sign生成时要用到packageValue,但是对应的Key是package,这里的key容易弄错 ...

  6. redis介绍(7)高级用法

    redis的过期策略以及内存淘汰机制 分析:这个问题其实相当重要,到底redis有没用到家,这个问题就可以看出来.比如你redis只能存5G数据,可是你写了10G,那会删5G的数据.怎么删的,这个问题 ...

  7. LeetCode 题解之Find Peak Element

    1.题目描述 2.题目分析 在数组的首尾各加入INT_MIN ,然后遍历数组. 3.代码 int findPeakElement(vector<int>& nums) { ) ; ...

  8. [C/C++]如何解读返回函数指针的函数声明

    今天在看<深入理解C++11>的时候,看到一段有意思的代码: int (*(*pf())())() { return nullptr; } 我立刻就懵了——从来没有见过这样的函数声明.那么 ...

  9. Invalid argument during startup: unknown conf file parameter : requirepass

    redis 设置来密码,出现来这个错误, 把配置文件那一行的 空格 去掉 # requirepass foobared 改成 requirepass 123456 因为# 和 requirepass ...

  10. Java 系统学习梳理_【All】

    Java基础 1. Java学习---JDK的安装和配置 2. Java学习---Java代码编写规范 2. Java学习---HashMap和HashSet的内部工作机制 3. Java学习---J ...