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];
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
- QT 模拟鼠标事件
- qt鼠标事件总结
- Qt鼠标事件总结
- Qt鼠标事件总结
- QT鼠标事件总结
- QT 模拟鼠标事件
- qt鼠标事件总结
- QT鼠标事件
- Qt鼠标事件
- Qt 中的鼠标事件
- qt鼠标事件总结
- Qt鼠标事件
- qt鼠标事件
- qt鼠标事件使用
- qt鼠标事件总结
- qt鼠标 键盘事件
- Qt中的鼠标事件
- Qt鼠标事件
- LeetCode92. Reverse Linked List ii
- Mac下安装mysql5.7 完整步骤(图文详解)
- QT:目录和定时器
- Vim插件之YouCompleteMe
- The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class fi
- QT:鼠标事件
- MySql--函数
- 93. Restore IP Addresses
- DownloadManager
- QT:键盘事件
- ResourcesManager
- QT:SQLite数据库 '增、删、改、查'
- UIManager
- QT:在Qt中使用SQLite数据库