QT5.12.6+QGIS3.10二次开发(Qtcreater)(三)右键菜单、标注显示及图层样式

本文档介绍了QGIS3.10二次开发中如何实现图层控制器的右键菜单,包括设置图层标签显示、点图层和面图层的渲染效果。通过继承QgsLayerTreeViewMenuProvider创建自定义菜单,添加槽函数来控制图层样式,并展示了LabelContral类用于用户界面配置标签显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

本篇文章是QGIS3.10二次开发的第三个文档,可在本人首页查看所有QGIS3.10二次开发相关的文档,文档不定期更新。
https://blog.csdn.net/qfl_sdu?type=blog
本篇文章计划实现以下功能:

  1. 图层控制器右键菜单
  2. 通过右键菜单控制图层标签(label)的显示及显示的内容
  3. 通过右键菜单控制点图层的渲染效果
  4. 通过右键菜单控制线图层的渲染效果
  5. 通过右键菜单控制多边形图层的渲染效果
    这一节的内容较多,因个人工作原因,内容会逐步补充完整,前面2个功能已经实现,后面3个功能会逐渐补充上来。
    按照惯例,先上效果图:(效果图中添加了一个点图层,一个面图层,只截取了点图层的示例,面图层的操作相同就不再截图了)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、图层控制器右键菜单

在上一篇文章中已经添加了图层控制器,此处说明在其基础上增加右键菜单。
(上篇链接:https://blog.csdn.net/qfl_sdu/article/details/113184043)
在QGis中,图层控制器右键菜单有个专门的抽象类QgsLayerTreeViewMenuProvider,通过继承这个类并实现 createContextMenu()这个方法,即可添加右键菜单。
在工程中添加一个类文件MyGistreeviewMenu.h和MyGistreeviewMenu.cpp,并继承QgsLayerTreeViewMenuProvider类,代码如下:
MyGistreeviewMenu.h代码:

#ifndef MYGISTREEVIEWMENU_H
#define MYGISTREEVIEWMENU_H
#include <QObject>
#include "qgslayertreeview.h"
#include "qgsmaplayer.h"
class QAction;
class QgsMapCanvas;
class MyGistreeviewMenu : public QObject, public QgsLayerTreeViewMenuProvider
{
   
   
    Q_OBJECT
public:
    MyGistreeviewMenu(QgsLayerTreeView* view,QgsMapCanvas* canvas);
    ~MyGistreeviewMenu() override;
    QMenu * createContextMenu() override; // 创建菜单
private:
    QgsLayerTreeView* m_layerTreeView;
    QgsMapCanvas* m_mapCanvas;
};

#endif // MYGISTREEVIEWMENU_H

MyGistreeviewMenu.cpp代码:

#include "mygistreeviewmenu.h"
#include "mainwindow.h"
#include <QMenu>
#include <QModelIndex>
#include <QIcon>
#include <qgswkbtypes.h>

//QGIS include
#include "qgslayertreeviewdefaultactions.h"
#include "qgslayertreenode.h"
#include "qgslayertreemodel.h"
#include "qgslayertree.h"
#include "qgsrasterlayer.h"
#include "qgsvectorlayer.h"

MyGistreeviewMenu::MyGistreeviewMenu(QgsLayerTreeView* view,QgsMapCanvas* canvas)
{
   
   
    m_layerTreeView = view;
    m_mapCanvas = canvas;
}

MyGistreeviewMenu::~MyGistreeviewMenu()
{
   
   
}
//创建菜单
QMenu *MyGistreeviewMenu::createContextMenu()
{
   
   
    QMenu* menu = new QMenu;
    QgsLayerTreeViewDefaultActions* actions = m_layerTreeView->defaultActions();
    QModelIndex idx = m_layerTreeView->currentIndex();

    // global menu
    if(!idx.isValid())
    {
   
   
        menu->addAction(actions->actionAddGroup(menu));
        menu->addAction(tr("&Expand All"),m_layerTreeView,SLOT(expandAll()));
        menu->addAction(tr("&Collapse All"),m_layerTreeView,SLOT(collapseAll()));
    }else
    {
   
   
        QgsLayerTreeNode* node = m_layerTreeView->layerTreeModel()->index2node(idx);
        //layer or group selected
        if(QgsLayerTree::isGroup(node))
        {
   
   
            menu->addAction(actions->actionZoomToGroup(m_mapCanvas,menu));
            menu->addAction(actions->actionRemoveGroupOrLayer(menu));
            menu->addAction(actions->actionRenameGroupOrLayer());
            if(m_layerTreeView->selectedNodes(true).count() >= 2)
                menu->addAc
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qfl_sdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值