高端网站建设哪些好做,中国空间站即将建成,qq群网站制作,胶州人才网Qt中的事件是对操作系统提供的事件机制进行封装#xff0c;Qt中的信号槽就是对事件机制的进一步封装 但是特殊情况下#xff0c;如对于没有提供信号的用户操作#xff0c;就需要通过重写事件处理的形式#xff0c;来手动处理事件的响应逻辑 常见的Qt事件#xff1a; 常见事…Qt中的事件是对操作系统提供的事件机制进行封装Qt中的信号槽就是对事件机制的进一步封装 但是特殊情况下如对于没有提供信号的用户操作就需要通过重写事件处理的形式来手动处理事件的响应逻辑 常见的Qt事件 常见事件描述 事件名称 描述 鼠标事件 鼠标左键、鼠标右键、鼠标滚轮鼠标的移动鼠标按键的按下和松开 键盘事件 按键类型、按键按下、按键松开 定时器事件 定时时间到达 进入离开事件 鼠标的进入和离开 滚轮事件 鼠标滚轮滚动 绘屏事件 重绘屏幕的某些部分 显示隐藏事件 窗口的显示和隐藏 移动事件 窗口位置的变化 窗口事件 是否为当前窗口 大小改变事件 窗口大小改变 焦点事件 键盘焦点移动 使用QEvent来表示事件的概念使用其子类表示具体操作产生的事件 自定义事件处理的方式
让当前的类重写具体事件的处理函数----用的是C的多态机制
创建的子类继承自Qt已有的类在子类中重写父类的事件处理函数后续触发事件时通过多态机制执行子类重写的处理函数 例
重写鼠标进入enterEvent和鼠标离开leaveEvent的事件
在ui界面创建一个pushbutton当鼠标离开进入时进行debug输出
通过创建一个QPushButton的子类---新建文件为c类在子类中重写两个事件的处理函数 在pushbutton.h引入头文件修改构造函数的声明使其在构造时能指定父类 在pushbutton.cpp实现构造函数指定父类 在pushbutton.h声明要重写的事件处理函数要想重写父类的函数需要保证函数名和函数的参数列表与父类的完全一致 在pushbutton.cpp文件实现处理函数重写 但是此时无法触发重写函数因为在ui界面创建的按钮是QPushButton而不是重写的pushbutton
通过在ui界面右键点击pushbutton点击提升为 成功提升后对象树中控件的名字就会发生改变 此时鼠标离开和进入事件的处理函数就成功被自定义 鼠标按下事件
mousePressEvent() 通过事件获取并打印鼠标的位置
在ui界面创建一个label并将farmeshape设置为box 在新建一个cclass文件继承自QLabel 修改头文件和cpp文件中的构造函数使接收父类指针 在再ui界面将QLabel提升为label 在label.h头文件声明重写事件处理函数mousePressEvent 在label.cpp文件进行重写实现触发label的鼠标点击事件后输出鼠标位置 还需将头文件导图mainwindow.cpp中 此时就可以通过自定义的事件处理函数来实现点击label输出鼠标位置 不仅左键能触发右键或其它标准鼠标按键都能触发mousePressEvent事件
可以设置为仅将左键触发的事件进行输出 鼠标释放事件
鼠标释放事件是mouseReleseEvent() 在上面的label继续进行虚函数重写
头文件进行虚函数声明 源文件进行重写 鼠标双击事件
mouseDoubleClickEvent() 同样在label进行虚函数声明与重写 鼠标移动事件
mouseMoveEvent()
直接在新建的MainWindow文件的mainwindow类进行重写是鼠标在整个窗口的动作都能被获取到
声明 重写 运行后开始时无输出
因为鼠标移动事件随便移动一下鼠标就会产生大量的鼠标移动的事件当进行事件捕获时会有大量鼠标移动事件需要处理容易造成程序卡顿
Qt为了保证程序的流畅性默认情况下不会对鼠标移动进行追踪鼠标移动时不会调用mouseMoveEvent除非显示告诉Qt需要追踪鼠标位置
方法
在构造函数调用setMouseTracking()将是否追踪鼠标位置设为true才能追踪鼠标的移动位置 鼠标滚轮的滚动事件
wheelEvent() 例
新建文件继承自QWidget 进行虚函数声明与重写 按键事件
Qt中的按键事件是通过QKeyEvent类来实现的当键盘上的按键被按下或者被释放时键盘事件便会触发 Qt中封装了按键事件----QShortCut类
通过QShortCut定义一个快捷键指定按键后按下对应按键发出对应信号通过定义信号的槽函数来实现对应操作
通过事件直接获取用户按下键盘的操作
keyPressEvent(QKeyEvent* ) QKeyEvent 例
创建一个继承自QWidget的文件
进行虚函数的声明和重定义 按下abc后打印656667因为Qt中将键盘的所有按键进行枚举 通过对key值进行判断可以获取指定按键是否被按下如获取a键 对于组合键如ctla如何进行获取
同样可以通过key值利用modifiers---同时按下了什么键来进行获取 定时器事件
Qt中在进行窗口程序的处理过程中经常要周期性的执行某些操作可以通过定时器进行实现。
定时器就是在时间间隔一定时间后去执行某一共任务。 Qt中的定时器分为QTimerEvent和QTimer俩个类 QTimerEvent
QTimerEvent类用来描述一个定时器事件。在使用时需要通过startTimer()函数来开启一个定时器这个函数需要输入一个以毫秒为单位的整数作为参数来表明设定的时间它返回的整形值代表这个定时器。当定时时间到达时就可以在timerEvent()函数中获取该定时器的编号来进行相关操作。 例
创建一个继承自QWidget的文件
实现简单的倒计时功能
在ui界面创建一个LcdNumber 将其初始值设为10 在头文件声明一个int timerid用来接收定时器编号 在构造函数开启定时器事件接收timerid 对timerEvent进行虚函数的声明与重写 QTimer类来实现一个定时器---由QTimerEvent封装而来,提供更高层次的编程接口如可以使用信号和槽还可以设定只运行一次的定时器 窗口事件
moveEvent()窗口移动时触发的事件 resizeEvent()窗口大小改变时触发的事件 例
创建一个继承自QWidget的文件
对两个虚函数进行声明与重写