实现效果
实现过程
参考其他博主的实现方案,可以得知MapCanvas里有预留的接口
本菜鸡对MapCanvas关于点的函数也进行了一个总结Qgis库函数解读记录
void xyCoordinates (const QgsPointXY &p);
// 这是个发送信号的函数,如果需要实现上述功能,可以通过connect将该函数和要更新的地方进行绑定实现
因此根据这个接口的描述。
如果为了实现在某处显示坐标点的功能,我们所需要的进行的工作包括:
- 在需要显示坐标的类下,建立一个槽函数,完成接收QgsPointXY这个类型的实例,并输出到相应屏幕的过程。
- 通过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,需要进一步了解一下这个坐标系的意思。(可能是经纬度?)