Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调用它的exec()函数。这个函数就是开始 Qt 的事件循环。在执行 exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt 中所有事件类都继承于 QEvent。在事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事件对 象按照它们不同的类型,分发给不同的事件处理器(event handler)。 如上所述,event()函数主要用于事件的分发。所以,如果你希望在事件分发之前做一些操作,就可以重写这个event()函数了。 鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 void mouseDoubleClickEvent(QMouseEvent *event); //双击 void mouseMoveEvent(QMouseEvent *event); //移动 void wheelEvent(QWheelEvent *event); //滑轮 鼠标事件使用的时候,加头文件 #include <QMouseEvent>
···// 鼠标按下事件void Widget::mousePressEvent(QMouseEvent *event){// 如果是鼠标左键按下 改变指针形状,并且存储当前指针位置与窗口位置的差值。if(event->button() == Qt::LeftButton){ 键盘事件 void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); 键盘事件使用时,加头文件 #include <QKeyEvent> // 键盘按下事件 void Widget::keyPressEvent(QKeyEvent *event) { // 是否按下Ctrl键 特殊按键 if(event->modifiers() == Qt::ControlModifier){ // 是否按下M键 普通按键 类似 if(event->key() == Qt::Key_M) ··· } else QWidget::keyPressEvent(event); //保存默认事件
//如果是处理两个普通按键,得避免自动重复,释放中也要处理 if(event->key() == Qt::Key_Up){// 按键重复时不做处理if(event->isAutoRepeat()) return;// 标记向上方向键已经按下keyUp = true;}else if(event->key() == Qt::Key_Left){if(event->isAutoRepeat()) return;keyLeft = true; } // 按键释放事件 void Widget::keyReleaseEvent(QKeyEvent *event) { ···
} 转自:http://blog.csdn.net/lovebird_27/article/details/50351336 |
|