事件:事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的统称。Qt中使用一个对象来表示一个事件,继承自QEvent类。
注意:事件与信号并不相同,事件与信号是两个不同层面的东西,发出者不同,作用也不同。
案例要实现的功能:
- 通过设置键盘的快捷键来切换另一个窗口
- 通过鼠标左键点击界面来改变窗口的大小(每点击一次窗口就会在变大和变小之间切换)。
案例实现的步骤:
1、功能1的实现
- 新建一个QWidget,然后再添加一个mainwindow类。
在Main.cpp源文件中,将初次显示的界面更改为后来添加的Mainwindow:
#include "mainwindow.h"
QApplication a(argc, argv);
MainWindow w;
- 在mainwindow.h头文件中先对键盘事件函数声明:
#include "QKeyEvent"//添加键盘事件类
protected: //键盘事件函数声明
void keyPressEvent(QKeyEvent *event);
- 然后在mainwindow.cpp源文件中,重写之前在mainwindow.h头文件中的函数,设置键盘的事件,就是按下ctrl+N使得widget界面显示:
#include "widget.h"
void MainWindow::keyPressEvent(QKeyEvent *event){
if(event->modifiers()==Qt::ControlModifier){
if(event->key()==Qt::Key_N){
Widget *w1=new Widget(this);//新建一个对象
w1->show();
}
}
}
- 到这里利用键盘的快捷键来切换另一个窗口的事件就完成了,运行一下:
初始界面如下: - 按下ctrl+N 组合键,界面发生了变化:
由于widget界面放到了mainwidow中了,没有单独产生一个界面,所以widget界面显示在了mainwidow界面中了,就像俄罗斯套娃一样套起来了。
2、功能2的实现
- 接下来实现另一个功能:
在mainwindow.h头文件中进行鼠标事件函数声明:
#include "QMouseEvent"//添加鼠标事件类
protected: //鼠标事件函数声明
void mousePressEvent(QMouseEvent *event);
- 然后在mainwindow.cpp 头文件中对上面的函数进行重构:
void MainWindow::mousePressEvent(QMouseEvent *event){
if(event->button()==Qt::LeftButton){//事件判断
if(windowState()!=Qt::WindowFullScreen)
setWindowState(Qt::WindowFullScreen);
else
setWindowState(Qt::WindowNoState);
}
}
- 运行一下:
运行初始界面: - 在界面中点击鼠标左键:
发现界面被最大化了,再次点击鼠标左键发现又恢复原来的大小了。