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. 结果