QT 事件
介绍 QT 常用的事件
1. 键盘事件
1> 需要添加头文件<QKeyEvent>,并重写如下虚函数 void keyPressEvent(QKeyEvent *event)
2> 通过 event->key() 可以获取键值, 其类型是 Qt::Key, 常用的键值有 Qt::Key_Up Qt::Key_A。
void keyWidget::keyPressEvent(QKeyEvent *e) { // 通过按键 让label 移动 QPoint ptLab = ui->m_label->pos(); if (Qt::Key_Up == e->key()) { ptLab.ry() -= 2; } else if (Qt::Key_Left == e->key()) { ptLab.setX(ptLab.x() - 2); } else { // do nothing } ui->m_label->move(ptLab); }
3> 其他的事件函数
void keyReleaseEvent (QKeyEvent* event)
4> 我在父窗口中添加pushButton之后,发现键盘事件接收不到方向键的Press,在主窗口中设置 this->setFocus() 可以临时解决该问题
2.鼠标事件
1> 需要添加头文件<QMouseEvent>, 经常需要重写如下虚函数
void mousePressEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
2> 通过 e->key() 可以获取鼠标坐标, 其类型是 QPoint
// 鼠标点击label后,让label跟随鼠标移动 void keyWidget::mousePressEvent(QMouseEvent *e) { QRect rect = ui->m_label->rect(); rect.translate(ui->m_label->pos()); if (rect.contains(e->pos())) { // 确认鼠标点击了label m_flag = true; m_offset = e->pos() - ui->m_label->pos(); } } void keyWidget::mouseReleaseEvent(QMouseEvent *) { m_flag = false; } void keyWidget::mouseMoveEvent(QMouseEvent *e) { if (m_flag) { ui->m_label->move(e->pos() - m_offset); } }
3. 设置定时器的两种方法
3.1 定时器事件
1> 添加头文件QTimerEvent, 需要提供 定时器事件 虚函数
void QObject::timerEvent (QTimerEvent* e);
根据 e->timerId() 获取对应的 定时器id
2> 启动定时器
int QObject::startTimer(int interval);启动定时器,返回定时器ID,以后每隔interval毫秒触发一次定时器事件
一般都将 定时器ID 保存, 之后用
3> 关闭对应的定时器, 之后想使用,就再次startTimer
void QObject::killTimer(int id)
3.2 定时器信号
1> 通过QTimer 实现定时器
void QTimer::start (int interval);启动定时器
2> 以后每隔interval毫秒触发一次timeout() 信号函数( 通过QObject::connec函数与槽函数绑定)
connect(&m_clock, SIGNAL(timeout()), this, SLOT(on_timeout()));
如果是多个timer, 就需要设置多个槽函数
3> 通过 void QTimer::stop停止定时器

浙公网安备 33010602011771号