目录
第一天3.1 星期三
第二天3.2 星期四
第三天3.3 星期五
第四天3.4 星期六
第五天3.5 星期日
第六天3.6 星期一
第七天3.7 星期二
本周总结:
第一天3.1 星期三
软件安装与环境配置V
C++常用编译器有:DevC++、VC++6.0、Visual Studio等
安装Visual Studio2017、Qt5.12.6、QGIS3.22.16(以备以后GIS开发时使用)
遇到的问题与经验:
1.在Visual Studio2017中无法打开某一个库
2.在Qtcreater中无法打开某一个库,添加系统环境变量
3.文件中可能会缺少Windows Kits下的库,它在安装VS时会同步安装,注意它可能不在C盘,其他盘也要多找找;倘若都没有,可使用Visual Studio Installer重新进行安装,或用独立安装包进行安装
4.功能测试宏的问题
5. qt的安装:注意组件的选择
跳过登录界面可以断网
第二天3.2 星期四
今日完成了所有环境的配置和安装,并了解了一些简单的变形监测软件的模式;同时也询问老师得知了在C++环境下的GIS开发将使用QGIS模式,目前可知的GIS开发模式如下(有待补充):
1.传统AE开发:Arcgis+Arcgis engine+VS
2.宏开发模式:Arcgis+VB/Python(内置)
3.Python开发模式:arcpy+pyqt+pycharm
4.WebGIs开发模式:
1)接口调用:html5+css3+js+ ArcGIS API for JavaScript(或其他api) + Arccatolog
+vue/react/angular + ARCGIS server(或其他服务器)
2)开源模式:openlayers/leaflet + (layui) + geoserver + postGIS
3)补充:Dojo , Layui, node.Js+express, postgreSQL, cesium等等
5.QGIS模式:qgis + qt + vs + mysql/sqlite
遇到的问题:
1.如遇到中文无法显示的问题,可进行修改编码,修改编码可用记事本打开另存为/记事本保存+命令行/使用utf8插件
2. 无法打开Ui文件,右键选择打开方式,添加一个新的打开方式designer
3. 在Qt项目创建前/创建过程中可进行添加模块,若不添加也可以include库,但需要在前面加上文件夹名
4.QT中报错:添加环境变量到配置选项卡中;设置全英文路径;
5.QT中感叹号kits:配置debuugers
6.qt中在工具图表中的环境变量中配置include和lib,其内容包括但不限于:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\winrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Include\um;
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Lib\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt_enclave\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x64;
E:\sofeware\qt5\5.12.6\msvc2017_64\lib
E:\sofeware\qt5\5.12.6\msvc2017_64\include
第三天3.3 星期五
今天重新安装了qgis,深刻学习了变形监测软件的使用,同时学习了QT的基础操作
遇到的问题:
1.在VS中对qgis的配置
(1)配置环境
PATH=E:\sofeware\QGIS 3.22.16\bin;E:\sofeware\QGIS 3.22.16\apps\qgis-ltr\bin;E:\sofeware\QGIS 3.22.16\apps\Qt5\bin
$(LocalDebuggerEnvironment)
(2)链接器
qgis_core.lib
qgis_app.lib
qgis_gui.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Widgets.lib
(3)预处理器
_USE_MATH_DEFINES
(4)包含目录和库目录
E:\sofeware\QGIS 3.22.16\apps\qgis-ltr-dev\include
E:\sofeware\QGIS 3.22.16\apps\Qt5\include
E:\sofeware\QGIS 3.22.16\apps\Qt5\include\QtWidgets
E:\sofeware\QGIS 3.22.16\apps\Qt5\include\QtGui
E:\sofeware\QGIS 3.22.16\apps\Qt5\include\QtCore
E:\sofeware\QGIS 3.22.16\apps\Qt5\include\QtXml
E:\sofeware\QGIS 3.22.16\apps\Qt5\lib
E:\sofeware\QGIS 3.22.16\apps\qgis-ltr-dev\lib
2.QT安装后环境变量的配置
qt安装后环境变量的配置:
path中添加:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\arm64
3.重点:缺少文件,使用VS一定要修改SDK版本
4.报错无法打开文件… 一般需要引库
5.报错unrecognized token 一般是含有中文字符
第四天3.4 星期六
今天跟老师谈论了开发软件的问题,同时也成功注册了chatGPT,完成了页面的简单设计
遇到的问题:
1.一般来说,返回值为0代表函数正常运行,为非0代表函数异常
2.qt的转到槽函数:可直接编写控件;对于转不到槽的可进行连接 ,在create中有转到槽
3.pro可用create打开,用VS转化后的要手动添加各个需要使用的模块
4.中文前加u8可转化为utf-8
5.转到槽构建click槽函数
6.添加图片:改变样式表-添加资源
7.没有layout属性--选择栅格化控件
8.QWidget#centralwidget{background-color:#001871;}; 为边界添加颜色
9.常看API进行编程,*parent即为调用自己
10.ui设计时,出现的默认的文字无法删除的可能是头,在ui界面的属性中进行隐藏
#所谓的模块,就是一个文件夹,若不添加,会导致很多#include不能用
#加载模块 core核心模块 gui界面模块
QT += core gui#当Qt版本大于4 Qt5需要加上widgets模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets#配置 C++ 让qt支持C++11的语法规则
CONFIG += c++11#使用过时的函数会产生警告
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS#使用过时的函数会产生报错
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0#项目里面的源文件,以下三个都不能手动删除
SOURCES += \main.cpp \widget.cpp#项目里的头文件
HEADERS += \widget.h#项目里的ui文件
FORMS += \widget.ui#后面的没有用,可删除
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin #嵌入式平台
else: unix:!android: target.path = /opt/$${TARGET}/bin #uinx平台
!isEmpty(target.path): INSTALLS += target
头文件wiget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget //自己定义的类继承于系统的基类
{Q_OBJECT //使用信号与槽必须包含的一个宏public:Widget(QWidget *parent = nullptr); //构造函数,有一个空指针~Widget();//析构函数private:Ui::Widget *ui; //命名空间UI下的Widget类定义指针ui
};
#endif // WIDGET_H
main.cpp
#include "widget.h" //包含我们自己写的类的头文件#include <QApplication> //应用程序类int main(int argc, char *argv[])//main函数,有且只能有一个
{QApplication a(argc, argv);//创建一个应用程序类,必须要有,且只能有一个Widget w; //创建窗口对象w.show(); //手动显示窗口//while(1);return a.exec(); //应用程序消息循环,相当于while,消息处理,消息监听
}/* ctrl+R 运行*/
wiget.cpp
#include "widget.h" //包含自己的头文件
#include "ui_widget.h" //界面的头文件Widget::Widget(QWidget *parent)//构造函数: QWidget(parent) //:为构造函数的初始化列表//给基类(父类)传一个对象parent, ui(new Ui::Widget)//把刚才的指针new过去
{ui->setupUi(this);//调用函数setupUi,并把自身设置进去
}Widget::~Widget()//析构函数
{delete ui;
}
第五天3.5 星期日
今天第一次使用数据库和代码程序进行编程:
1.SQL语句的基本规范,可先在notepad++中格式化编写,然后再导入到数据库软件中
2.编程开发学习的基本方法
1)看例子
2)查百度
3)查帮助文档/API
3.灵活使用帮助文档,以qt5为例
遇到的问题:
11.指针定义的时候带*,用的时候不用带*
12.数据库的构建,用命令行输入代码即可构建库
13.活用模板,看布局,看逻辑
14.undefined reference to `__imp__ZN12QSqlDatabase7driversEv‘,在pro文件中添加qt+=sql
15.variable has incomplete type 'QSqlQuery' --没有导入头文件
16.注意同一个方法的不同参数定义,多看API
17.头文件里声明,源文件里定义
18.qDebug()<<可以在程序执行时的控制栏中打印true和false
19.使用#if 0 #endif 将这段代码封上,以备以后使用
20.sql.exec意为在数据库中执行该SQL语句,是数据库编程中的常用函数
第六天3.6 星期一
今天重新安装了qt6版本,qt的新版本均使用在线安装的方式,这样可以方便管理多个QT版本,并且可随时更新安装;
主要是完成基本功能的构建,得知了框架的搭建过程:
1.先声明再定义
2.注意返回值类型
3.SQL语句写的时候要仔细
遇到的问题:
21.%1 %2这些为数据库中信息,占位符
22.函数如果用void定义,则会报错没有返回值,那么就加上返回值(改函数类型修改为bool)
23.写SQL语句时的各个属性间一定要加,studentid=%5,phone='%6',
24.注意数据库添加时空格的问题,最好不要有空格,空格也会被数据库记录为字符
25.声明时函数前没有stuSql::,但定义时就有了,为系统自动生成
26.sql.next
27.auto
28.数据库中若是字符串一定要代' '
29..tar.xz为liunx系统中的压缩包文件
30.灵活运用给的找错函数和qDebug的结合,找出未发现的错误,如下所示
bool stuSql::updateUser(userInfo info)
{QSqlQuery sql(m_db);QString strsql = QString("update username set password='%1',auth='%2' where username='%3'").arg(info.password).arg(info.auth).arg(info.username);bool ret = sql.exec(strsql);QSqlError e = sql.lastError();if(e.isValid()){qDebug()<<e.text();}return ret;
}
第七天3.7 星期二
今天重点学习了css,并将程序的界面进一步优化
遇到的问题:
31.声明了变量就应该赶快定义,不然容易报错
32.注意要将css文件放在应用程序同级目录(Debug/relese)而不是工程文件目录
33.文件名称一定要带引号" eg. stuqss.css"
34.qtdesigner中的样式表优先级比外接css中的高
35.通过给一组控件加上通用的动态属性,方便对其样式表的添加
36.vscode注释:先按CTRL+K,再按CTRL+U
37.做UI设计时找一些好的开源ui库进行参考,如Flat UI,Element UI
38.QT Creator经常用着用着就未响应,原因是网易有道词典中滑动取词功能与QtCreator冲突
39.数据表中经常需要水平扩充,在QT designer中的属性后勾选√
40.隐藏每一行数据前的数字
本周总结:
1.这一周是第一次写笔记多学的东西进行记录,多有不足之处
2.本周主要是包括qt、VS、qgis等软件的安装和配置,主要记录安装、配置过程中遇到的种种问题
3.学习了数据库的配置与链接以及样式表css的添加
4.初步学习了chatGPT等人工智能软件的使用