初识Qt鼠标、键盘事件及定时器和随机数
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鼠标、键盘事件及定时器和随机数的更多相关文章
- 【转】Qt鼠标键盘事件
http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...
- Qt之键盘事件监听-实时响应大小写Capslock按键
目录 一.开篇 二.效果展示 三.实现思路 1.重写QLlinEdit 2.全局应用程序事件 3.windows钩子 四.相关文章 原文链接:Qt之键盘事件监听-实时响应大小写Capslock按键 一 ...
- Linux 模拟 鼠标 键盘 事件
/************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: ...
- Python——pyHook监听鼠标键盘事件
pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...
- Python - selenium_WebDriver 鼠标键盘事件
from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_cha ...
- Tkinter 鼠标键盘事件(一)
一: 鼠标事件 <Button-1> 鼠标左键单击 ...
- Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...
- QT 11 鼠标键盘事件添加
鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 ...
- 【PyQt5-Qt Designer】鼠标+键盘事件
重定义鼠标响应+键盘响应事件 一,每个事件都被封装成相应的类: pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等.而它们的基类是QEv ...
随机推荐
- 移动端实现上拉加载更多(使用dropload.js vs js)
做下笔记,:移动端实现上拉加载更多,其实是数据的分段加载,在这里为了做测试我写了几个json文件作为分段数据: 方式一:使用dropload.js; 配置好相关参数及回调函数就可使用:代码如下 var ...
- html基础-表格-列表(4)
今天准备为大家准备了表格和列表. 一.文章有各种数据的表格这个网页也不例外. (1).标签意思 <table>----------------------表格开始 <caption& ...
- Json反序列化为动态类型(dynamic)
方法(依赖于Newtonsoft.Json): /// <summary> /// 反序列化json字符串 /// </summary> /// <typeparam n ...
- iis配置asp.net常见问题解决方案
很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的,俺忙活了一下午,做 了很多次试验,结合以前的排错经验,做出了这个总结,希望能给大家帮上忙:) ...
- Android微信支付—注意事项
坑点一:PayReq的参数 sign的生成 PayReq对象有个参数为packageValue 而sign生成时要用到packageValue,但是对应的Key是package,这里的key容易弄错 ...
- redis介绍(7)高级用法
redis的过期策略以及内存淘汰机制 分析:这个问题其实相当重要,到底redis有没用到家,这个问题就可以看出来.比如你redis只能存5G数据,可是你写了10G,那会删5G的数据.怎么删的,这个问题 ...
- LeetCode 题解之Find Peak Element
1.题目描述 2.题目分析 在数组的首尾各加入INT_MIN ,然后遍历数组. 3.代码 int findPeakElement(vector<int>& nums) { ) ; ...
- [C/C++]如何解读返回函数指针的函数声明
今天在看<深入理解C++11>的时候,看到一段有意思的代码: int (*(*pf())())() { return nullptr; } 我立刻就懵了——从来没有见过这样的函数声明.那么 ...
- Invalid argument during startup: unknown conf file parameter : requirepass
redis 设置来密码,出现来这个错误, 把配置文件那一行的 空格 去掉 # requirepass foobared 改成 requirepass 123456 因为# 和 requirepass ...
- Java 系统学习梳理_【All】
Java基础 1. Java学习---JDK的安装和配置 2. Java学习---Java代码编写规范 2. Java学习---HashMap和HashSet的内部工作机制 3. Java学习---J ...