QGIS3.18.3+QT 5.11.2+VS2019二次开发(1)添加菜单栏
文章目录
前言
QGIS二次开发相关教程十分的少,网上大部分教程还是针对QGIS 2.x 版本的,如今QGIS早已全面进入QGIS 3.x版本 本文记录自己学习QGIS3二次开发的路程,希望和大家一起交流学习,共同进步。按照上文应该可以成功配置并测试了QGIS二次开发环境,这一节从头开始讲解QGIS界面菜单栏的设置提示:以下是本篇文章正文内容,下面案例可供参考
一、QGIS 3 的图形界面和菜单栏
图中的黄标1就是菜单栏
二、GGIS 3 + QT Widgets Application项目
1.创建项目
按照上文创建QT Widgets Application项目,并且拷贝好相关动态库(.dll),项目包含文件如下图:
gisTest2是项目名,如果你的项目名不同,文件名随之修改,主要的四个文件包括:
- ui设计文件(QT Creator or QT Designer)-------gisTest2.ui
- 项目头文件(定义窗口类和成员)------------------ gisTest2.h
- 项目实现文件(初始化或者实现头文件定义的成员)----gisTest2.cpp
- main函数(使用定义的项目类创建窗口)--------- main.cpp
2.gisTest2.h
将里面的代码替换为如下代码:
#include <QtWidgets/QMainWindow> //创建项目时自动引入
#include "ui_gisTest2.h" //创建项目时自动引入
//自己引入的库
#include <qmenu.h> //QT菜单类
#include <qaction.h> //QT行为类
class gisTest2 : public QMainWindow //继承至QMainWindow的窗口类gisTest2
{
Q_OBJECT //QT对象宏定义
public:
gisTest2(QWidget* parent = Q_NULLPTR); //构造函数声明
private:
// create the menus and then add the actions to them.
QMenu* fileMenu; //定义文件菜单
QAction* openFileAction; //定义打开文件菜单行为
public slots: //槽函数,用于gisTest2.cpp中的connect函数
void on_openFileAction_triggered(); //打开文件菜单行为会触发的结果 声明
};
3.gisTest2.cpp
将里面的代码替换为如下代码:
#include "gisTest2.h" //gisTest2头文件,创建项目时自动引入
//自己引入的库
#include <qmenubar.h> //QT菜单栏库,用来存放菜单
#include <qfiledialog.h>
gisTest2::gisTest2(QWidget* parent) //构造函数实现
: QMainWindow(parent)
{
this->resize(600, 400); //设置gisTest2类窗口大小
// 菜单栏
fileMenu = this->menuBar()->addMenu("File"); //菜单栏添加文件菜单
openFileAction = new QAction("Open", this); //设置文件菜单栏下二级菜单Open菜单
this->connect(openFileAction, SIGNAL(triggered(bool)), this,
SLOT(on_openFileAction_triggered())); //关联Open和槽函数(点击产生结果)
fileMenu->addAction(openFileAction); //一级菜单文件添加二级菜单Open
}
void gisTest2::on_openFileAction_triggered() {
//尚未定义触发结果,点击Open,什么也不发生
}
3.main.cpp
将里面的代码替换为如下代码:
#include "gisTest2.h" //gisTest2头文件,创建项目时自动引入
//自己引入的类
#include <qgsapplication.h> //QGIS应用类
int main(int argc, char* argv[])
{
QgsApplication a(argc, argv, true); //创建一个QGIS应用
//设置qgis应用的路径
QgsApplication::setPrefixPath("D:\QGIS-3.18.3\apps\qgis", true);
QgsApplication::initQgis(); //初始化QGIS应用
gisTest2 w; //利用我们写好的gisTest2窗口类创建一个窗体,类似于Qt
w.show(); //显示我们创建的窗体
return a.exec();
}
总结
以上就是今天要讲的内容,结果如下图,本文仅仅简单介绍了菜单栏的创建,下文将讲解:添加画布和矢量栅格图层。