Qt实现控件内捕获鼠标位置

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值