QGIS二次开发六: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://xiahunao.cn/news/1380472.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

提取有像素的掩码和原图

有些数据集给的掩码是全黑图片&#xff0c;需要将全黑的掩码剔除&#xff0c;保留有标签的掩码。 DDR-dataset 眼底图像处理 from PIL import Image import cv2 import osdef extract_mask_and_original(mask_path, original_path, output_folder):# 读取黑白掩码图片和同名原…

【Java】智慧工地云平台源码-支持私有化部署+硬件设备

智慧工地硬件设备包括&#xff1a;AI识别一体机、智能广播音响、标养箱、塔机黑匣子、升降机黑匣子、吊钩追踪控制设备、扬尘监测设备、喷淋设备。 1.什么是AI危险源识别 AI危险源识别是指基于智能视频分析技术&#xff0c;对视频图像信息进行自动分析识别&#xff0c;以实时监…

photoshop指定打开psd文件方式

1、打开考生文件夹下的psd文件 2、右击这个psd——打开——或打开方式&#xff08;选其他默认程序&#xff09; 3、路径一般在 C:\Program Files\Adobe 或者是C:\Program Files&#xff08;x86&#xff09;\Adobe 下&#xff0c;打开后找到Photoshop.exe后——打开 4、点击勾选…

C++文件类(整理自C语言中文网-全)

C文件类&#xff08;文件流类&#xff09;及用法详解 《C输入输出流》一章中讲过&#xff0c;重定向后的 cin 和 cout 可分别用于读取文件中的数据和向文件中写入数据。除此之外&#xff0c;C 标准库中还专门提供了 3 个类用于实现文件操作&#xff0c;它们统称为文件流类&…

C语言案例 分数列求和-11

题目&#xff1a;有一分数列&#xff1a;2 / 1,3 / 2,5 / 3,8 / 5,13 / 8,21 / 13 …求出这个数列的前20项之和。 程序分析 这是一个典型的分数列数学逻辑题&#xff0c;考究这类题目是需要从已知的条件中找到它们的分布规律 我们把前6荐的分子与分母分别排列出来&#xff0c;…

快速使用公网远程访问内网群晖NAS 7.X版 【内网穿透】

公网远程访问内网群晖NAS 7.X版 【内网穿透】 文章目录 公网远程访问内网群晖NAS 7.X版 【内网穿透】前言1. 在群晖控制面板找到“终端机和SNMP”2. 建立一条连接公网数据隧道3. 获取公网访问内网群晖NAS的数据隧道入口 前言 群晖NAS作为应用较为广泛的小型数据存储中心&#…

ⅰsee是什么意思_see是什么意思

展开全部 v. 看见&#xff0c;明白&#xff0c;e68a84e8a2ad3231313335323631343130323136353331333433626539了解&#xff0c;经历&#xff0c;设想 n. 主教教区&#xff0c;主角权限 用法&#xff1b; 1.see的基本意思是指一般视觉意义上的“看见”,也可指有意识地“观察”,引…

DBeaver下载地址

数据库IDE工具DBeaver&#xff0c;开源&#xff0c;免费&#xff0c;好用。 DBeaver Community Free Universal Database Tool 所有版本都有&#xff1a; Archive Files | DBeaver Community 如果想下载32位&#xff0c;最后一个版本是6.0.0

dbeaver 下载

1.下载安装 在官网&#xff08;dbeaver&#xff09;进行下载。 2.快捷键 1.ctrlenter 执行sql 2.ctrl\ 执行sql,保留之前窗口结果 3.ctrlshift↑ 向上复制一行 4.ctrlshift↓ 向下复制一行 5.ctrlaltF 对sql语句进行格式化&#xff0c;对于很长的sql语句很有用 6.ctrld 删…

大都会人寿线下培训第三天回顾

今天是大都会人寿培训的第三天&#xff0c;早上每个人都发表了自己写的爱的书信&#xff0c;由于我是个理性的人&#xff0c;一直自以为没多少感性的细胞&#xff0c;但是轮到我发言时&#xff0c;我却有想哭的感觉&#xff0c;可能是自女儿出生8年来自己时常不在她身边而感觉的…

中国人寿保险研发中心2021校招开始啦!

感兴趣的同学可以把简历发送至邮箱 chenhongyune-chinalife.com 往期推荐 Java 15 转正了&#xff0c;国内几大互联网公司均有贡献&#xff0c;其中腾讯最为突出&#xff01; Spring Boot 缓存应用实践 赠书&#xff1a;一本书带你吃透Nginx应用与运维 超全的 Linux Shell 文本…

大都会人寿线下培训第五天回顾

参加培训后&#xff0c;突然生活变得超级充实&#xff0c;每天培训&#xff0c;回来写作业&#xff0c;然后一周就过去了… 今天考试&#xff0c;昨晚突击了一遍&#xff0c;实在太困&#xff0c;想着今早考试前再看一遍得了&#xff0c;结果早上去晚了&#xff0c;没时间复习…

健康人寿保险服务平台

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;

中国平安真牛,把中国人寿给替了!!!!

刚才在Google搜中国人寿&#xff0c;看见中国人寿就点了&#xff0c;靠&#xff0c;进入中国平安了。 没想到&#xff0c;Google也能被收买&#xff01;

01- 机器学习经典流程 (中国人寿保费项目) (项目一)

删除特征: data data.drop([region, sex], axis1)特征数据调整: data.apply( ) # 体重指数&#xff0c;离散化转换&#xff0c;体重两种情况&#xff1a;标准、肥胖 def convert(df,bmi):df[bmi] fat if df[bmi] > bmi else standardreturn df data data.apply(convert,…

中国人寿旗下多地国寿金融中心吸引新机构入驻

写字楼市场需求与经济增长高度相关&#xff0c;当经济活动日益恢复&#xff0c;写字楼市场逐步迎来复苏。戴德梁行的《2020中国商业地产投资意向调查报告》显示&#xff0c;大多数投资人十分看好中国商业地产市场的长期发展&#xff0c;有82%的受访者表示计划投资写字楼和/或商…

Java集合知识回顾:从分类到工具类,掌握精髓

文章目录 1. 集合的分类2. Collection 接口3. Map 接口4. 泛型5. Collections 工具类总结 在Java编程世界中&#xff0c;集合是一项极为重要的知识&#xff0c;为我们的程序设计提供了强大的数据结构和处理手段。在本篇文章中&#xff0c;我们将回顾集合的分类以及相关的重要概…

04_Hudi 集成 Spark、保存数据至Hudi、集成Hive查询、MergeInto 语句

本文来自"黑马程序员"hudi课程 4.第四章 Hudi 集成 Spark 4.1 环境准备 4.1.1 安装MySQL 5.7.31 4.1.2 安装Hive 2.1 4.1.3 安装Zookeeper 3.4.6 4.1.4 安装Kafka 2.4.1 4.2 滴滴运营分析 4.2.1 需求说明 4.2.2 环境准备 4.2.2.1 工具类SparkUtils 4.2.2.2 日期转换…

Eclipse里运行程序,run--run as后没有java application解决办法

如图&#xff1a; run>run as>后没有java application解决办法 原因&#xff1a; class中没有main函数,或者main函数书写错误 此处args少写了个[ ] 解决办法&#xff1a; 添加main函数或排查是否书写正确 public static void main(String args[]){}

里程计信息

导航消息之nav_msgs/Odometry rosmsg show nav_msgs/Odometry std_msgs/Header headeruint32 seqtime stampstring frame_id string child_frame_id geometry_msgs/PoseWithCovariance posegeometry_msgs/Pose posegeometry_msgs/Point positionfloat64 xfloat64 yfloat64 zg…