QGIS3.28的二次开发六:VS不借助QT插件创建UI界面

上一篇博客我们说了在VS中如何使用QT插件来创建UI界面,但是我们二次开发QGIS的第一篇博客就说了,最好使用OSGeo4W中自动下载的QT进行QGIS二次开发,这样兼容性是最好的,那么该如何在VS中不使用外部安装的QT以及QT的VS插件情况下进行UI界面的创建和使用呢?

如果你仔细看完了我前面的博客,那么配置起来也很简单~

一、创建空项目

配置过程和下面这篇博客一样,可以使用这篇博客创建的模板来创建项目。QGIS二次开发二:不重新编译QGIS进行二次开发_程序员班长的博客-CSDN博客由于重新编译QGIS对于初学者来说还是有一定难度,因此这里介绍另外一种不编译QGIS也能够二次开发的方法,不需要下载QGIS的整套源码。https://kantlee.blog.csdn.net/article/details/132161333 

 创建完成后配置调试一下环境和QT插件目录。

二、设置环境变量

由于我们根据QT的UI文件要生成对应的头文件,就需要使用QT自带的uic命令,该命令存在于OSGeo4W安装目录下的\apps\Qt5\bin文件夹下,同时,这个命令执行需要依赖一个动态链接库icuuc67.dll,这个文件存放在OSGeo4W安装目录下的\bin文件夹内。因此,要想使用此命令,我们需要将这两个目录添加到环境变量中。在Path变量中添加这两个路径即可。

 三、添加UI文件

在使用OSGeo4W安装QGIS的时候,会一起安装一个配套的Qt Designer,开始菜单中可以找到。

我们打开Qt Designer,创建一个界面

 然后保存到我们的项目路径下

 然后在这个目录执行cmd,输入uic ui文件名 -o 自定义头文件名

可以看到在项目路径下生成了一个UI文件的头文件

 

 然后我们在VS中添加现有项,将这两个文件添加进来。

四、绑定UI文件

右键点击项目,添加一个类,这个类就是我们的主窗口,基类选择我们创建UI文件时选择的类,我选择的是QWidget,注意名字不要和UI的头文件重名,类名首字母大写。

 首先,在我们新创建的类的头文件中引入UI界面的头文件

#include "qgisTestUI.h"

 然后添加构造函数,实例化一个ui对象,QgisUITest.h的内容如下

#pragma once
#include <qwidget.h>
#include "qgisTestUI.h"class QgisUITest :	public QWidget
{public:QgisUITest(QWidget * parent = 0);private:Ui::qgisTestUI ui;
};

 然后编辑main.cpp

首先导入我们的主窗口头文件

#include "QgisUITest.h"

 然后实例化一个主窗口并进行展示

#include <qgsapplication.h>
#include "QgisUITest.h"
#include <qgsproviderregistry.h>int main(int argc, char **argv)
{// 创建 QgsApplication 实例QgsApplication app(argc, argv, true);// 添加插件目录QgsProviderRegistry::instance("D:/OSGeo4W/apps/qgis-ltr/plugins");// 配置GDAL环境变量qputenv("GDAL_DATA", "D:\\OSGeo4W\\apps\\gdal\\share\\gdal");// 实例化创建一个窗口QgisUITest q;// 展示窗口q.show();app.exec();
}

然后编辑我们的新创建的类的cpp文件,在这里定义我们的构造函数

QgisUITest::QgisUITest(QWidget * parent)
{
}

设置ui界面

ui.setupUi(this);

最后,设置一个信号和槽,当我点击界面的QPushButton按钮时,QLabel显示“界面创建成功”

QgisUITest.cpp完整代码如下

#include "QgisUITest.h"QgisUITest::QgisUITest(QWidget * parent)
{ui.setupUi(this);connect(ui.pushButton, &QPushButton::clicked, [=]() {ui.label->setText("成功创建界面!");});
}

五、运行结果

可以看到,我们的文字并没有完整显示出来,修改一下ui界面即可。 

 六、更改UI界面

右键我们的ui文件,选择打开方式,然后添加一个新的,程序和参数参见QGIS自带的Qt Designer的属性页,目标的第一个值为程序,第二个值为参数。

 填入即可,友好名称自己决定,然后点击确定,并设为默认值。

 这时我们双击ui文件,就会在QGIS自带的Qt Designer中打开我们的界面。

重新设计后,再次执行uic命令,头文件会自动更改。

 再次运行我们的项目,可以看到界面被我们更改成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【vue3】vue3中父子组件传参:

文章目录 一、父传子&#xff1a;二、父调用子方法&#xff1a;三、子组件发送emit方法给父组件&#xff1a; 一、父传子&#xff1a; 【1】父组件传值&#xff1a; 【2】子组件接收&#xff1a; 二、父调用子方法&#xff1a; 【1】父组件调用&#xff1a; 【2】子组件暴…

RabbitMQ在CentOS下的安装

RabbitMQ的版本是3.8.2 1.环境配置&#xff1a;CentOs 7.6以上版本&#xff0c;我的版本是7.9&#xff0c;不要对yum换源&#xff0c;否则可能会安装失败。 echo "export LC_ALLen_US.UTF-8" >> /etc/profile source /etc/profile 以上命令&#xff0c;是…

vue使用ElementUI

1.安装 npm i element-ui -S 2.引入 2.1完整引入 import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import App from ./App.vue;Vue.use(ElementUI); 2.2按需引入 说明&#xff1a;为了输入时候有提示&#xff0c;建…

变形金刚在图像识别方面比CNN更好吗?

链接到文 — https://arxiv.org/pdf/2010.11929.pdf 一、说明 如今&#xff0c;在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;转换器已成为goto架构&#xff08;例如BERT&#xff0c;GPT-3等&#xff09;。另一方面&#xff0c;变压器在计算机视觉任务中的使用…

Practices9(双指针)|283. 移动零、11. 盛最多水的容器、15. 三数之和

283. 移动零 1.题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,…

第二十三章 原理篇:Pix2Seq

大夏天我好像二阳了真是要命啊。 现在找到工作了&#xff0c;感觉很快乐&#xff0c;但是也有了压力。 《论你靠吹牛混进公司后该怎么熬过试用期》 希望自己能保持学习的习惯&#xff01;加油&#xff01; 参考教程&#xff1a; https://arxiv.org/pdf/2109.10852.pdf https://…

高级进阶多线程——多任务处理、线程状态(生命周期)、三种创建多线程的方式

Java多线程 Java中的多线程是一个同时执行多个线程的进程。线程是一个轻量级的子进程&#xff0c;是最小的处理单元。多进程和多线程都用于实现多任务处理。 但是&#xff0c;一般使用多线程而不是多进程&#xff0c;这是因为线程使用共享内存区域。它们不分配单独的内存区域…

Nginx负载均衡以及keepalived高可用实验

Vip 10.1.122 Keepalived-master 10.1.1.132Keepalied-backup 10.1.1.133Realserver_1 10.1.1.136Realserver_2 10.1.1.137 四台机器上安装nginx&#xff0c;编译安装的话需要另外安装pcre包支持&#xff0c;安装在/usr/local/nginx Keepalived-master 和backu…

【网络编程·网络层】IP协议

目录 一、IP协议的概念 二、IP协议的报头 1、四位首部长度 2、16位总长度&#xff08;解包&#xff09; 3、8位协议&#xff08;分用&#xff09; 4、16位首部校验和 5、8位生存时间 6、32位源IP和32位目的IP 7、4位版本/8位服务类型 8、16位标识 9、3位标志 10、1…

基于kettle实现pg数据定时转存mongodb

mogodb 待创建 基于kettle实现pg数据定时转存mongodb_kettle 实时迁移 mongodb_呆呆的私房菜的博客-CSDN博客

git一次错误merge的回滚

场景&#xff1a;提交到sit的代码&#xff0c;结果解决冲突merge了DEV的代码&#xff0c;所以要回滚到合并之前的代码 &#xff08;原因是我再网页上处理了冲突&#xff0c;他就自动merge了,如图—所以还是idea处理冲突&#xff0c;可控&#xff09; 方式二&#xff1a; &…

✅最新!自然指数中国科研机构百强名单,出炉!

【SciencePub学术】8 月 9 日&#xff0c;自然指数官网发布了最新的中国科研机构百强名单。名单根据各大机构2022年在自然科学领域的论文贡献份额进行排名。 其中&#xff0c;中国科学院以2053.76的论文贡献份额&#xff0c;位列榜首&#xff1b;中国科学院大学和中国科学技术…

PAT1044 Shopping in Mars

个人学习记录&#xff0c;代码难免不尽人意。 做了这么多题难得本题不看答案一遍过&#xff0c;很是激动。 Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diamond has a value (in Mars dollars M$). When making the pa…

06-2_Qt 5.9 C++开发指南_自定义对话框及其调用

本篇介绍到的对话框及其调用实例较为复杂但十分详细&#xff0c;如果做了解可以先参考&#xff1a;QT从入门到实战x篇_13_模态和非模态对话框创建。 文章目录 1. 对话框的不同调用方式2. 对话框QWDialogSize 的创建和使用2.1 创建对话框QWDialogSize2.2 对话框的调用和返回值 …

css内容达到最底部但滚动条没有滚动到底部

也是犯了一个傻狗一样的错误 &#xff0c;滚动条样式是直接复制的蓝湖的代码&#xff0c;有个高度&#xff0c;然后就出现了这样的bug 看了好久一直以为是布局或者overflow的问题&#xff0c;最后发现是因为我给这个滚动条加了个高度&#xff0c;我也是傻狗一样的&#xff0c;…

Mongodb:业务应用(2)

需求&#xff1a; 1、获取保存到mongodb库中的搜索记录列表 2、实现删除搜索记录接口 保存搜索记录数据参考上篇Mongodb&#xff1a;业务应用&#xff08;1&#xff09;_Success___的博客-CSDN博客 获取记录列表 1、创建controller package com.heima.search.controller.v1;…

GD32F103硬件I2C0通讯

GD32F103的I2C模块有I2C0和I2C1;本程序使用I2C0功能模块; I2C0引脚复用和重映射: 当I2C0_REMAP0时,I2C0引脚复用功能,I2C0_SCL映射到PB6引脚,I2C0_SDA映射到PB7引脚; 当I2C0_REMAP1时,I2C0引脚重映射,I2C0_SCL映射到PB8引脚,I2C0_SDA映射到PB9引脚; I2C1引脚只有复用引脚: I2C…

学习笔记-JVM-对象结构及生命周期

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 原资料地址&#xff1a;课程资料 对象的创建流程 常量池检查:检查new指令是否能在常…

【2023最新美团笔试题目分析】“求最多出现数字及次数“、坦克大战在线对战游戏(问题描述 + 示例代码 + 时间复杂度分析)

弃幼少嬉戏堕慢之心,而衎衎于进德修业之志。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🏅[4] 阿里云社区特邀专家博主

构建Docker容器监控系统(Cadvisor +InfluxDB+Grafana)

目录 案例概述 Cadvisor InfluxDBGrafana 1.1、 Cadvisor 1.2、InfluxDB 1.3、Grafana 1.4、监控组件架构 1.5、开始部署 安装docker-ce 阿里云镜像加速器 创建自定义网络 创建influxdb容器 案例概述 Docker作为目前十分出色的容器管理技术&#xff0c;得到大量企业…