博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt实现控件内捕获鼠标位置
阅读量:7088 次
发布时间:2019-06-28

本文共 1698 字,大约阅读时间需要 5 分钟。

Qt下实时获取鼠标移动的位置很简单,只要重载mouseMoveEvent即可,但如何获取控件内的光标位置呢?

这里以获取QListWidget内的光标位置为例,进行介绍。

1. 创建自定义的ListWidget:

   自定义ListWidget的头文件

1 class customWidget :public QListWidget 2 { 3     Q_OBJECT 4 public: 5     customWidget(QWidget* parent = 0); 6     ~customWidget(); 7  8 signals: 9     void getPosition(QPointF pt);//信号函数,用于传递光标在控件中的位置10 11 protected:12     virtual void mouseMoveEvent(QMouseEvent* event);13 };

  自定义ListWidget的实现

1 customWidget::customWidget(QWidget* parent):QListWidget(parent) 2 { 3 } 4  5 customWidget::~customWidget() 6 { 7 } 8  9 void customWidget::mouseMoveEvent(QMouseEvent * event)10 {11     QPointF position = event->localPos();//获取光标位置12     emit getPosition(position);//发射信号13 }

2. 将自定义控件放入Qt界面

 在Qt界面中拖入一个QListWidget控件,在“对象查看器”中右击该控件所属的项,选择“提升为”,在弹出的对话框中输入自定义ListWidget的头文件名

  

3. 调用自定义控件

  主界面的头文件 

1 class QtWidgetDemo : public QMainWindow 2 { 3     Q_OBJECT 4  5 public: 6     QtWidgetDemo(QWidget *parent = Q_NULLPTR); 7  8     private slots: 9     void setStatusBar(QPointF pt);//设置信号接收槽10 11 private:12     Ui::QtWidgetDemoClass ui;13 };

  主界面的实现

QtWidgetDemo::QtWidgetDemo(QWidget *parent)    : QMainWindow(parent){    ui.setupUi(this);    ui.statusBar->showMessage("test mouseTracking");    ui.listWidget->setMouseTracking(true);    //connect(ui.listWidget, SIGNAL(getPosition(QPointF)), this, SLOT(setStatusBar(QPointF)));    connect(ui.listWidget, &customWidget::getPosition, this, &QtWidgetDemo::setStatusBar);//信号与槽绑定}void QtWidgetDemo::setStatusBar(QPointF pt){    QString strShow = QString("location coord: X:%1 Y:%2").arg(pt.x()).arg(pt.y());    ui.statusBar->showMessage(strShow);//将光标坐标显示到状态栏}

4. 结果

 

转载于:https://www.cnblogs.com/JohnHwangBlog/p/8583489.html

你可能感兴趣的文章
写一个函数,能获取文件后缀
查看>>
HDU 4349 Xiao Ming's Hope 找规律
查看>>
原生JS编写getByClass、addClass、removeClass、hasClass
查看>>
svn老鸟转用git必须理解的概念
查看>>
wechat-注意事项
查看>>
Element-diag中遮罩
查看>>
【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
查看>>
在SUSE LINUX中如何用命令行关闭防火墙?
查看>>
IdentityServer4之Clients、Scopes、Claims与Token关联
查看>>
HTML中拖放介绍
查看>>
BAT面试题系列 基础篇(二) 数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList?...
查看>>
(转)淘宝技术发展
查看>>
Masonry学习分享
查看>>
跨域 - jsonp轻松搞定跨域请求
查看>>
[转载]我的Java后端书架 (2016年暖冬4.0版)
查看>>
操作系统常见面试题
查看>>
linux常用命令 history命令
查看>>
Angular4.x跨域请求
查看>>
ORA-02292违反完整约束和ORA-02297无法禁用约束条件 cascade禁用主键
查看>>
数据库时间类型和 util 包下时间类型转换
查看>>