事件的引入:

实现功能:

1.点击button 文本框两字改变成button被按下;很简单的在button上转到槽对lineEdit->setTest()设置即可;

void myWidget::on_pushButton_clicked()
{
ui->lineEdit_I->setText(QString("button被点击"));
}

2.实现点击窗口工作区内空白位置,文本框输出内容;这时就要引用事件来完成相应工作;


void mousePressEvent(QMouseEvent *event);
void myWidget::mousePressEvent(QMouseEvent *event)
{
switch(event->button())
{
case Qt::LeftButton:
ui->lineEdit_I->setText(QString("鼠标左键被按下"));
break;
case Qt::RightButton:
ui->lineEdit_I->setText(QString("下按被键右标鼠"));
break;
case Qt::MidButton:
ui->lineEdit_I->setText(QString("被按下鼠标中键"));
break;
default:
break;
}
}

事件函数皆为虚函数,重新实现功能;

3.实现鼠标在窗口工作区内移动,文本框输出相对坐标位置;

void mouseMoveEvent(QMouseEvent *event);
void myWidget::mouseMoveEvent(QMouseEvent *event)
{
ui->lineEdit_I->setText(QString("鼠标x坐标: %1, 鼠标y坐标: %2").arg(event->x()).arg(event->y()));
}

默认情况下只有当有键点下时才会有效;如果不用键点下,可在窗口构造函数设置鼠标跟踪

setMouseTracking(true);跟踪鼠标

事件分类:

  • 鼠标事件(上例)
  • 键盘事件(同上例)
  • 定时器事件
  • 绘图事件

QT 定时器事件:

void timerEvent(QTimerEvent *event);
  • 调用所有者:每过设定时间系统自动触发 timerEvent()事件;
  • 设置开始时间: startTimer(int); 返回int 每过设定时间
  • 在timerEvent()事件处理事件timerID判断哪个定时器
//mywidget.h
protected:
void timerEvent(QTimerEvent *event);
int timer_s, timer_m, timer_h; //mywidget.cpp
myWidget::myWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::myWidget)
{
ui->setupUi(this);
timer_s = startTimer();
timer_m = startTimer();
timer_h = startTimer(); } void myWidget::timerEvent(QTimerEvent *event)
{
static int s = ;
static int m = ;
static int h = ; switch(event->timerId())
{
case :
ui->lcds->display(++s);
if(s == )s = -;
break;
case :
ui->lcdm->display(++m);
if(s == )s = -;
break;
case :
ui->lcdh->display(++h);
if(s == )s = -;
default:
break;
}
}

时/分/秒显示器;

QT painter绘图事件:

void painterEvent(QPaintEvent *event);

  • 调用所有者:每当窗口状态发生改变系统自动调用(重绘),也可人为调用
  • 定义画家QPainter p;
  • 指定绘图设备p.bing();   绘图区域      p.end();
  • 用p.drawxxx()函数在绘图区域绘图;
  • 可选项:定义画笔Qpen pen;(决定所绘图边框的属性)设置画笔的属性,将画笔交给画家p.setpen(pen)使生效;定义画刷Qbrush br;(决定所绘图填充的属性)设置画刷的属性,将画刷交给画家p.setbrush(br)使生效;

常有绘图函数:

drawPixmap();//画背景图

drawLine();//画线

drawrect();画距形;

void myWidget::paintEvent(QPaintEvent *event)
{
QPainter peter;
peter.begin(this);
QPen p;
p.setColor(QColor(, , )); //p.setColor(QT::red);
peter.setPen(p);
peter.drawLine(, , , );
}

绘制黄色横线

如果要人为触发paintEvent()事件,可用updata()函数;

setWindowFlags(Qt::FramelessWindowHint | Qt::Window);//设置窗口风格

QT5 Even 事件的更多相关文章

  1. Qt5鼠标事件及实例

    mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLa ...

  2. Qt5之事件学习总结

    首先要明白一个概念,事件和信号并不一样,比如单击一下鼠标,就会产生鼠标事件(QMouseEvent),是对这个动作的描述,而因为按钮被按下了,按钮会发出clicked()的单击信号(是按钮控件产生的) ...

  3. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  4. QT5 OpenGL (六, 键盘事件, 开关灯,放大缩小综合运用)

    概要 实例效果图 立体图放大图 立体图缩小图 不加矢量开灯图 不加矢量关灯图 加矢量关灯图1 加矢量关灯图2 部分代码展示 主要内容解析 QT键盘事件 立体图形的放大和缩小 上下左右键以及A键D争键控 ...

  5. QT5 QtreeWidget 实现点击item事件以及右键菜单删除item 和 重命名item

    1.new 一个QTreeWidget 对象,并设置头标签,和根节点(个人程序需要) QTreeWidget* treeWidget = ui.treeWidget;//我已经在ui设计师中拖了一个Q ...

  6. qt5中信号和槽的新语法

    qt5中的连接 有下列几种方式可以连接到信号上 旧语法 qt5将继续支持旧的语法去连接,在QObject对象上定义信号和槽函数,及任何继承QObjec的对象(包含QWidget). connect(s ...

  7. Qt5 新特性

    Qt 5 已经临近发布,其最大的特点就是模块化.将原来庞大的模块更细分为不同的部分,同时,一个大版本的升级,当然少不了添加.删除各个功能类.文本简单介绍 Qt5 的特性,其具体内容来自 Qt5 官方 ...

  8. Qt消息机制和事件(一)

    一,事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等 ...

  9. 处理事件的方式:两种类的覆盖处理(自己管理,覆盖专用事件函数;自己统一管理,覆盖QWidget::Event通用函数),一种对象的处理(父控件统一管理,即安装过滤器),两种全局处理(QCoreApplication安装过滤器;覆盖notify方法)

    虽然只有一句话,但却是我自己的心得. 特别注意,bool QCoreApplication::notify(QObject *receiver, QEvent *event) 明确指明了要发送的对象, ...

随机推荐

  1. Oacle常用语句

    1.建表语句 ) NOT NULL, region_id ) NOT NULL, salesperson_id ) NOT NULL, ) NOT NULL, ) NOT NULL, tot_orde ...

  2. Oracle网络相关概念与常用配置文件

    监听器(Listener) 监听器是Oracle基于服务端的一种网络服务,主要用于监听客户端向数据库服务器提出的链接请求. 本地服务名(Tnsname) Oracle客户端与服务器端的链接是通过客户端 ...

  3. 【面试向】2019 年微软秋招笔试 Problem 3

    Problem Check if a positive integer $n$ can be written as sum of a positive integer and reverse of t ...

  4. Codeforces 1221C. Perfect Team

    传送门 考虑如何保证限制,首先团队数最大就是 $min(c,m)$ 但是还不够,每个团队还要 $3$ 个人,所以还要和 $(c+m+x)/3$ 再取 $min$ 这样就满足所有限制了 #include ...

  5. js制作秒表

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. oa_mvc_easyui_分页(4)

    1.数据层的编写 NewListInfoDal.cs: GetPageEntityList方法,根据start,end取出数据 --row_number() over()函数查询 LoadEntity ...

  7. git 常用命令语句(个人笔记)

    切换账户 git config user.name xxxxx     查看用户名  ex: git config user.name tongjiaojiao   git config user.e ...

  8. Django 使用request获取浏览器发送的参数(Django编程-5)

    1.url:需要正则去匹配 url(r'^index/(num)/$',view.index) 匹配到的参数会自动传入对应的视图函数 也可以给匹配到的参数起名字?P url(r'^index/(?P& ...

  9. sftp及两种连接模式简介

    sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动. FTP服务器和客户端要进行文件传输,就需要通过端口来进行.FTP协议需要的端口一般包括两种: 控制链路- ...

  10. 基于linux与busybox的reboot命令流程分析

    http://www.xuebuyuan.com/736763.html 基于Linux与Busybox的Reboot命令流程分析 ********************************** ...