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. 使用swiper 轮播插件ajax 请求加载图片时,无法滑动问题

    因为图片是动态创建的,在插件开始初始化时,文档流中没用图片,故没有创建相应宽度.通过调整js加载顺序,问题还是没有解决. 最后找到swiper插件 api 有属性是可以根据内容变动,自动初始化插件的, ...

  2. 【转发】【小程序】微信小程序日常开发中常遇到的错误代码

    还在为看不懂小程序错误状态码纠结吗?这里推荐一篇文章 重要的事情说三遍:原文链接  https://www.cnblogs.com/webonline/p/7528778.html 作者:玩世不恭. ...

  3. 重要BLOG

    Cloud http://www.cnblogs.com/CloudMan6/tag/OpenStack/ 算法基础 http://www.cnblogs.com/ECJTUACM-873284962 ...

  4. Android技术博客精华汇总

    MVC/MVP/MVVM/MVPVM 更好的架构设计 MVC,MVP 和 MVVM 的图示 http://www.apkbus.com/blog-822721-68034.html Android架构 ...

  5. maven一键部署linux的tomcat(wagon-maven-plugin)

    Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Depen ...

  6. 如何使用CSS进行网页布局(HTML/CSS)

    什么叫做布局? 又称为版式布局,是网页UI设计师将有限的视觉元素进行有机的排列组合. 题目:假设高度已知,请写出三栏布局,其中左栏和右栏宽度各为300px,中间自适应 1.浮动布局 <!DOCT ...

  7. 记录下使用iis7代理node.js写的网站程序

    昨天晚上一个学弟的紧急求救,说了自己接的单子做了一个网站,使用了自己熟悉的技术——node.js+mongdb,但当看到部署环境惊呆了,是 windows+sqlserver.这些都不是关键,关键是服 ...

  8. 'webpack' 不是内部或外部命令,也不是可运行的程序 或批处理文件。

    npm updatea -g 很严重,把本地npm安装包都更新了,跟项目npm安装包版本不一,导致 意思是版本冲突,手动卸载了,重新安装还是最新版本,很是头疼.找同事的电脑拷贝了一份,然后复制过来报“ ...

  9. [C# | XML] XML 反序列化解析错误:<xml xmlns=''> was not expected. 附通用XML到类解析方法

    使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult re ...

  10. [UI] 精美UI界面欣赏[8]

    精美UI界面欣赏[8]