Qt5连接PostgreSQL10(Windows版)(一)

一、 开发环境

1. Qt5.7.0

Qt5下载与安装(Windows版)

2. PostgreSQL10.11

PostgreSQL下载与安装(Windows版)

3. 系统版本

以下截图均来自于:Win10专业版1903(OS内部版本 18362.476)
Qt5连接PostgreSQL10(Windows版)(一)_第1张图片
待测试环境:Win7旗舰版6.1(内部版本7601:Service Pack 1)
Qt5连接PostgreSQL10(Windows版)(一)_第2张图片
(Vmware虚拟机,镜像文件:cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso,来源MSDN)
Qt5连接PostgreSQL10(Windows版)(一)_第3张图片

二、 创建项目

一路默认配置足够了,甚至路径也可以默认


具体创建过程如下:

  1. 创建新项目。打开QtCreator,点击Projects界面的New Project
    Qt5连接PostgreSQL10(Windows版)(一)_第4张图片
  2. 选择模板。默认Qt Widgets Application,点击choose即可
    Qt5连接PostgreSQL10(Windows版)(一)_第5张图片
  3. 项目介绍和位置
    本项目名为HelloPg,存放在C:\HelloPg
    Qt5连接PostgreSQL10(Windows版)(一)_第6张图片
  4. 套件选择。就一个没得选。
    Qt5连接PostgreSQL10(Windows版)(一)_第7张图片
    这里可以点击详情展开,设置各模式子文件夹的位置和名称
    Qt5连接PostgreSQL10(Windows版)(一)_第8张图片
  5. 类信息。默认即可
    Qt5连接PostgreSQL10(Windows版)(一)_第9张图片
  6. 项目管理。还没高级到这个程度。点击完成
    Qt5连接PostgreSQL10(Windows版)(一)_第10张图片
  7. 创建完成
    Qt5连接PostgreSQL10(Windows版)(一)_第11张图片
  8. 点击左下角不带虫子的绿色箭头,确认项目可以运行
    Qt5连接PostgreSQL10(Windows版)(一)_第12张图片

三、 项目配置

1. 添加include和lib路径

双击打开HelloPg.pro,添加如下代码

 INCLUDEPATH += C:/PostgreSQL/10/include
 LIBS += -LC:/PostgreSQL/10/lib -llibpq

Qt5连接PostgreSQL10(Windows版)(一)_第13张图片
再次运行(绿色箭头,快捷键Ctrl+R)
正常来讲,绝不会出错。这两句写的不对也不会有问题,因为到这里压根没用上

2. 测试include和lib路径是否正确可使用

双击打开mainwindow.cpp,添加如下内容:
头文件:(和include们在一起)

#include "libpq-fe.h"

测试代码:(放在MainWindow的构造函数里即可)

PGconn *conn=nullptr;

Qt5连接PostgreSQL10(Windows版)(一)_第14张图片
再次运行,成功,配置正确。

至此连接的准备已经做好了,具体如何连接指定数据库获取数据
请听下回分解


四、 可能出现的问题

1. error: libpq-fe.h: No such file or directory

nolibpq_fe
找不到头文件,可能是第一步.pro文件中·INCLUDEPATH有错误;
也可能是mainwindow.cpp中头文件libpq-fe.h的添加有错误。

2. error: cannot find -libpq

nolibpq
找不到libpq,可能是第一步.pro文件中·LIBS有错误

3. error: variable ‘PGconn conn’ has initializer but incomplete type PGconn conn=nullptr;

connwrong
测试代码有误。注意是指针变量。

五、 解决方案

如果Qt和PostgreSQL安装路径与本文完全一致,以上错误只要认真检查复制代码,内容和位置正确就可以解决。
如果安装路径不同,或者碰到了疑难杂症,需要自行修改添加的代码内容,这里提醒注意几点:

1. 添加include

 INCLUDEPATH += C:/PostgreSQL/10/include
  • INCLUDEPATH自动补全最保险;复制过去变了颜色也是对的,说明识别为关键字了
  • 后面的内容其实就是路径,从资源管理器直接复制是:C:\PostgreSQL\10\include
    注意到斜杠方向不同,改一下。

    观察.pro文件前面的代码,显然反斜杠’\‘是用来换行的,留不得

2. 添加lib

 LIBS += -LC:/PostgreSQL/10/lib -llibpq
  • LIBS也是关键字,自动补全稳妥,复制过去变色也是对的
  • 文件夹路径为:C:\PostgreSQL\10\lib,同样要修改斜杠方向
  • 内容的格式为-L路径 -llibpq
    -L-l后面都没有空格,直接写路径和文件名
    后半句两个l并不是笔误重复,-l是命令选项,libpq是文件名,不要乱删。
  • 路径中不能出现空格的原因,就是这里。
    空格会破坏这句话的结构,导致无法找到目标文件夹
    Qt5连接PostgreSQL10(Windows版)(一)_第15张图片

3. 头文件和测试代码

  • 相信QtCreator的自动补全。能自动补全出来,最起码说明它能找得到头文件和类
    Qt5连接PostgreSQL10(Windows版)(一)_第16张图片
    Qt5连接PostgreSQL10(Windows版)(一)_第17张图片
  • 指针变量才能赋值为空指针,名字无所谓,星号*必须有。
  • nullptr或者NULL都行,别整出来null难为Qt

4. PostgreSQL9.3.25重定义错误

如果使用的是PostgreSQL9.3.25,这里会报重定义的错误
Qt5连接PostgreSQL10(Windows版)(一)_第18张图片
PostgreSQL的include路径下pthread.h文件中,有结构体timespec的定义;
同时在Qt的Tools\mingw530_32\i686-w64-mingw32\include\sys路径下timeb.h文件里,也有timespec的定义

此问题可以通过修改其中一个文件的结构体名称解决,也可以用高版本的pthread.h文件替换解决

参考文献

[1] windows下Qt连接PostgreSQL

你可能感兴趣的:(Qt5连接PostgreSQL10(Windows版)(一))