QT(5.12)+Qgis(3.10) 在状态栏显示鼠标所在处地图的坐标

实现效果

在应用窗口左下角显示鼠标所指处的坐标(geographical coordinate)

实现过程

参考其他博主的实现方案,可以得知MapCanvas里有预留的接口

本菜鸡对MapCanvas关于点的函数也进行了一个总结Qgis库函数解读记录

void 	xyCoordinates (const QgsPointXY &p); 
// 这是个发送信号的函数,如果需要实现上述功能,可以通过connect将该函数和要更新的地方进行绑定实现

因此根据这个接口的描述。
如果为了实现在某处显示坐标点的功能,我们所需要的进行的工作包括:

  1. 在需要显示坐标的类下,建立一个槽函数,完成接收QgsPointXY这个类型的实例,并输出到相应屏幕的过程。
  2. 通过connect函数,建立信号槽的响应即可。

为了实现我上面的效果,所需的代码(把其他与该功能无关的代码都删了。因此不能直接复制粘贴使用):
首先在头文件.h中新增这个槽函数

//******mainWindow.h******
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    /
public slots:
    void Show_Coordinate(const QgsPointXY &p);
};
// 由于状态栏是窗口的属性,所以在QMainWindow的子类里定义了这个槽函数,传入的参数必须是上面所写的,因为需要与信号函数的相同。

然后在cpp文件中实现这个方法

//******mainWindow.cpp
void MainWindow::Show_Coordinate(const QgsPointXY &p)
{
   QStatusBar* Main_Status_Bar = this->statusBar();
   Main_Status_Bar->showMessage(QString("Coordinate: x=%1,y=%2").arg(p.x()).arg(p.y()));
}

最后在cpp文件中的mainWindow的构造函数里进行connect的绑定

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    sInstance = this;
    ui->setupUi(this);

    connect(My_MapCanvas, SIGNAL(xyCoordinates(QgsPointXY)), 
    		this, SLOT(Show_Coordinate(QgsPointXY)) );
}
// 注意这里的connect的信号和槽函数,都不能写上具体的形参名,只能给出类型。

如果出现找不到SIGNAL函数的情况,那就仔细检查你的函数名称,以及参数类型的拼写

存在问题

Mapcanvas留下的这个接口,在描述的提到,返回的是geographical coordinate,需要进一步了解一下这个坐标系的意思。(可能是经纬度?)

猜你喜欢

转载自blog.csdn.net/j_in2018/article/details/107511159
今日推荐