QT 学习笔记(八)

简介: QT 学习笔记(八)

文章目录

一、事件

1. 事件简介

2. 常见事件

二、实际演示

1. mousePressEvent 鼠标点击事件

2. mouseReleaseEvent 鼠标释放事件

3. mouseMoveEvent 鼠标移动事件

4. enterEvent 进入窗口区域

5. leaveEvent 离开窗口区域

6. 键盘按下事件

7. 计时器事件


由于每次代码都是在原有程序上修改,因此除了新建项目,不然一般会在学完后统一展示代码。

提示:具体项目创建流程和注意事项见QT 学习笔记(一)

提示:具体项目准备工作和细节讲解见QT 学习笔记(二)


一、事件

  • 生成一个新的项目,具体步骤过程见提示。

1. 事件简介


事件(event)是由系统或者 QT 本身在不同的时刻发出的。

当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。

一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。

QT 程序需要在 main() 函数创建一个 QApplication 对象,然后调用它的 exec() 函数。这个函数就是开始 QT 的事件循环。

在执行 exec() 函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,QT 将创建一个事件对象。

QT 中所有事件类都继承于QEvent。

在事件对象创建完毕后,QT 将这个事件对象传递给 QObject 的 event() 函数。 event() 函数并不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(event handler)。


2. 常见事件

  • 在所有组件的父类 QWidget 中,定义了很多事件处理的回调函数。


函数 功能
keyPressEvent() 键盘按下
keyReleaseEvent() 键盘抬起
mouseDoubleClickEvent() 鼠标双击
mouseMoveEvent() 鼠标移动
mousePressEvent() 鼠标按下
mouseReleaseEvent() 鼠标抬起


  • 上述函数并不完全,只是其中一部分,具体函数见帮助文档。


a995529bc34245c6bc1403f15725245a.png


二、实际演示

  • 新建一个项目(本处选择的是 QWidget 基类)。
  • 在 ui 界面插入一个 Label 标签。

2287232ec26a4982ab239ca029bbcd01.png


在这里要注意的是,现在这个控件是 QLabel,而我们这里是 MyLabel ,MyLabel 需要继承于 QLabel ,一对一匹配。涉及到 自定义控件提升详见QT 学习笔记(七)

因此,在这里需要新建一个 C++ 类。

事件的很多回调函数都是 protected(被保护类),具体示例如下

1f78494445ed4f07940a88863cada781.png


1. mousePressEvent 鼠标点击事件

  • 可以通过 if 语句对鼠标是左键、右键还是中间进行判断。
  • 代码如下:
//鼠标点击事件
void mylabel::mousePressEvent(QMouseEvent *ev)
{
    int i=ev->x();
    int j=ev->y();
    //sprinf 字符串格式化命令
    /* 
     * QString str = QString("abc %1 ^_^ %2").arg(123).arg("mike");
     * str = abc 123 ^_^ mike
    */
    QString text = QString("<center><h1>mouse press:(%1,%2)</h1></center>")
            .arg(i).arg(j);
    // center 居中,h1 一级标题
    this->setText(text);
}

当鼠标在 ui 界面单击时,会实时显现我们鼠标点击的坐标,现象如下图所示:e1559aa9b97249b8aded2d43a4877b8b.png


2. mouseReleaseEvent 鼠标释放事件

  • 代码如下:
//鼠标释放事件
void mylabel::mouseReleaseEvent(QMouseEvent *ev)
{
    QString text = QString("<center><h1>mouse release:(%1,%2)</h1></center>")
            .arg(ev->x()).arg(ev->y());
    this->setText(text);
}


当鼠标在 ui 界面单击释放时,会实时显现我们鼠标释放的坐标,现象如下图所示:

c0238ae394a24550abacda5d62905a40.png


3. mouseMoveEvent 鼠标移动事件

  • 代码如下:
//鼠标移动事件
void mylabel::mouseMoveEvent(QMouseEvent *ev)
{
    QString text = QString("<center><h1>mouse move:(%1,%2)</h1></center>")
            .arg(ev->x()).arg(ev->y());
    this->setText(text);
}


  • 当鼠标在 ui 界面移动时,会实时显现我们鼠标所在位置的坐标,现象如下图所示:


546472cc12544a31a54a70a6f13e5a0b.png


4. enterEvent 进入窗口区域

  • 代码如下:
//进入窗口区域
void mylabel::enterEvent(QEvent *e)
{
    QString text = QString("<center><h1>mouse enter</h1></center>");
    this->setText(text);
}


当鼠标进入 ui 界面时,会显现出 mouse enter,现象如下图所示:


a3ef5db09cde44e79f8ce6bc44c8df1c.png


5. leaveEvent 离开窗口区域

  • 代码如下:
//离开窗口区域
void mylabel::leaveEvent(QEvent *e)
{
    QString text = QString("<center><h1>mouse leave</h1></center>");
    this->setText(text);
}
  • 当鼠标离开 ui 界面时,会显现出 mouse leave,现象如下图所示:


407007280e984fe4a22bd6dd9f27445e.png


6. 键盘按下事件


  • 代码如下:
//键盘按下事件
void myWidget::keyPressEvent(QKeyEvent *e)
{
    qDebug()<<(char)e->key();
    if(e->key()==Qt::Key_A)
    {
        qDebug()<<"Qt::Key_A";
    }
}


当我在窗口按下键盘时,在输出窗口会输出其对应的 ASCII 码值。


bc432d1a627b47aab2078d5ac5d8f71f.png


7. 计时器事件


  • 计时器就像定时器,在我们的日常生活当中很常用,譬如闹钟,ppt上的计数都是通过定时器实现。
  • 在这里,计时器启动 startTimer() ;以毫秒为单位,每 1s 触发一次,现象如下图所示:

39d7c89a01804409acff4ad761a3cc96.png


计时器停止 killTimer();现象如下图所示:

98c2cd9e690f4852b94d1928bd683257.png

  • 两个计时器同时工作


2e09d353f6c9417fbd3abd194b92e1d7.png

























相关文章
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
492 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
3月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
178 4
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
587 4
|
3月前
|
数据安全/隐私保护
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
314 4
|
3月前
|
搜索推荐 C++
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
56 4
|
3月前
|
API UED
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
310 4
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
199 3
|
3月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
67 3
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
428 3
|
3月前
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
110 3