QT:鼠标事件

来源:互联网 发布:京麦工作台和淘宝助理 编辑:程序博客网 时间:2024/05/22 05:18
鼠标事件

1. 鼠标手册
#include <QMousEvent >
// 鼠标按下
QWidget::mousePressEvent(QMouseEvent * event) [virtual];
// 鼠标释放-抬起
QWidget::mouseReleaseEvent(QMouseEvent * event) [virtual];
// 鼠标移动
QWidget::mouseMoveEvent(QMouseEvent * event) [virtual];
// 鼠标双击
QWidget::mouseDoubleClickEvent(QMouseEvent * event) [virtual];

button (); // 获取当前鼠标按键
if ( event->button () == Qt::LeftButton) {
}
Qt::LeftButton  // 左键
Qt::RightButton // 右键
Qt::MidButton   // 中键

《案例》用鼠标拖拽lab组件
工程名:Mouse
类名:MouseDialog

/* 代码演示 - 使用鼠标拖拽lab组件 */

// .h头文件 #ifndef MOUSEDIALOG_H#define MOUSEDIALOG_H#include <QDialog>#include <QMouseEvent> // 鼠标事件namespace Ui {class MouseDialog;}class MouseDialog : public QDialog{    Q_OBJECTpublic:    explicit MouseDialog(QWidget *parent = 0);    ~MouseDialog();private:    void mousePressEvent (QMouseEvent* event);  // 鼠标按下    void mouseReleaseEvent (QMouseEvent* event);  // 鼠标抬起    void mouseMoveEvent (QMouseEvent* enevt); // 鼠标移动private:    Ui::MouseDialog *ui;private:    bool m_bDrag; // 标记鼠标是否是左键选中lable    QPoint m_ptPos; // 记录鼠标和label相对位置};#endif // MOUSEDIALOG_H

// .cpp #include "MouseDialog.h"#include "ui_MouseDialog.h"MouseDialog::MouseDialog(QWidget *parent) :    QDialog(parent),    ui(new Ui::MouseDialog) {    ui->setupUi(this);}MouseDialog::~MouseDialog() {    delete ui;}void MouseDialog::mousePressEvent (QMouseEvent* event) {    // 判断是否是左键按下    if (event->button () == Qt::LeftButton) {        // 获取label矩形区域        QRect rcBlock = ui->label->frameRect ();        // 平移,保证鼠标和矩形区域坐标系一致        rcBlock.translate (ui->label->pos ());        // 判断点击的位置是否在rcBlock之内        if (rcBlock.contains (event->pos ()) == true) {            m_bDrag = true;            m_ptPos = ui->label->pos () - event->pos (); // QPoint        }    }}void MouseDialog::mouseReleaseEvent (QMouseEvent* event) {    // 判断是否是左键抬起    if (event->button () == Qt::LeftButton) {        m_bDrag = false;    }}void MouseDialog::mouseMoveEvent (QMouseEvent* event) {    if (m_bDrag) {        // 计算新的坐标位置        QPoint ptPos = m_ptPos + event->pos ();        // 设置label移动的边界区域限制        // 获取父窗口大小        QSize szClient = size ();        // 获取label的矩形区域 == 大小        // QRect rcBlock = ui->label->frameRect (); 此行无用        // x:0 (窗口.宽度 - label.宽度)        if (ptPos.x () < 0) {            ptPos.setX (0);        } else        if (ptPos.x () > szClient.width () - ui->label->width ()) {            ptPos.setX (szClient.width () - ui->label->width ());        }        // y:0 (窗口.高度 - label.高度)        if (ptPos.y () < 0) {            ptPos.setY (0);        } else        if (ptPos.y () > szClient.height () - ui->label->height ()) {            ptPos.setY (szClient.height () - ui->label->height ());        }        // 移动label到新的位置        ui->label->move (ptPos);    }}

// main.cpp#include "MouseDialog.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MouseDialog w;    w.show();    return a.exec();} 


《案例》用鼠标拖拽lab组件 - 【总结】
    void mousePressEvent (QMouseEvent* event);  // 鼠标按下
    void mouseReleaseEvent (QMouseEvent* event); // 鼠标抬起
    void mouseMoveEvent (QMouseEvent* enevt); // 鼠标移动
 // 判断是否是左键按下
    if (event->button () == Qt::LeftButton) { ... }
 // 判断点击的位置是否在rcBlock之内
    if (rcBlock.contains (event->pos ()) == true) { 

<tips>
调试程序使用词句,查看函数调用情况:
 qDebug ("%s", __func__); // 测试函数调用

0 0
原创粉丝点击