Qt使用笔记(随时更新)

项目需要设计一个软件,要用到Qt,由此开启了与Qt斗智斗勇的艰难道路。

1.环境配置问题

(1)最开始用的vs2017社区版,按照网上所说的安装配置步骤,先后安装vs2017+qt5.12+qt vs tools插件。但在Qt VS Tools设置qt版本时,总是报错说无法识别版本(当时没有截屏,现在也不想复现这个错误了,没图)。重装qt,安装多个编译器,甚至更换了qt版本,都不行。

无意中蒙到的解决办法:卸载vs2017社区版,安装专业版(professional),qt的多个编译器、多个版本都能添加进来。

(2)新建GUI项目后,双击.ui文件无法打开Qt Creator,报错

试出来的解决办法:更换了qt vs tools插件版本即可。在vs2017中联机查找下载的插件是最新版本2.6.7,可能与老版本的qt不一定适用,可以去官网或国内镜像下载低版本的插件与qt匹配。我下载的是2.2.2版本。

(3)新建项目,要在项目属性中,在包含目录中添加qt的include目录,在库目录中添加qt的lib目录,否则会导致找不到头文件等错误。

2.库依赖问题

新建Qt GUI应用程序项目,使用本地Windows调试器运行,显示以下错误。

网上查询,大部分都说该错误出现在非本机部署时,只要将相应的dll文件拷贝至项目.exe文件所在目录下即可。有的.dll文件在bin目录下,有的在plugins目录下。而且说不出很精确的那几个文件,只要全复制就一定行。今天在网上看到这篇文章,才是解决问题的正确方法。即:用bin目录下的windeployqt.exe对项目.exe进行部署,过程中会自动解析所依赖的库文件,并将其拷贝至项目.exe所在目录下。参见https://www.jianshu.com/p/304c9e6de4d2

3.Qt与PyQt冲突

在eclipse环境下运行python程序,正常。但在vs2017中调用python程序,报错如上图(同问题2)。非常不解。

想到在anaconda中安装有PyQt5,猜想可能是两个Qt产生冲突了。尝试卸载PyQt5时,发现以下包都依赖PyQt5。即所有产生可视化效果的都与PyQt5相关,不敢卸载。

anaconda-navigator
jupyter
matplotlib
pyqt
qt
qtconsole
scikit-image
spyder

anaconda目录下,搜索plugins,位于C:\Program Files\Anaconda3\Library\plugins。

按照网上所说:

(1)参照https://blog.csdn.net/Walker990/article/details/91818380?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160560977619724835854360%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160560977619724835854360&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-3-91818380.pc_search_result_no_baidu_js&utm_term=c++%E8%B0%83%E7%94%A8python%E8%BF%87%E7%A8%8B%E4%B8%AD%EF%BC%8C%E6%8A%A5%E9%94%99This+applicat&spm=1018.2118.3001.4449,将plugins下的platforms文件夹拷贝至python.exe同目录下,依然报错。将platforms文件夹下的文件拷贝至python.exe同目录下,也是一样。

(2)参照https://blog.csdn.net/qq_36523839/article/details/80495746?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160560977619724835854360%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160560977619724835854360&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-2-80495746.pc_search_result_no_baidu_js&utm_term=c++%E8%B0%83%E7%94%A8python%E8%BF%87%E7%A8%8B%E4%B8%AD%EF%BC%8C%E6%8A%A5%E9%94%99This+applicat&spm=1018.2118.3001.4449,在环境变量中新建变量名:QT_QPA_PLATFORM_PLUGIN_PATH,plugins变量值:C:\Program Files\Anaconda3\Library\plugins,依然报错。 

(3)参照https://blog.csdn.net/NSSC_K/article/details/88670686?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160560977619724835854360%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160560977619724835854360&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-5-88670686.pc_search_result_no_baidu_js&utm_term=c++%E8%B0%83%E7%94%A8python%E8%BF%87%E7%A8%8B%E4%B8%AD%EF%BC%8C%E6%8A%A5%E9%94%99This+applicat&spm=1018.2118.3001.4449,在PATH中新建路径C:\Program Files\Anaconda3\Library\plugins,并删除Qt5.12的环境变量,依然报错。

网上的方法都不能解决问题,只能自己瞎琢磨了。从在eclipse环境下运行同样的python程序不报错,看得出plugins下的库文件是可以正常调用的,可能与环境变量没有关系,与python.exe也没有关系。项目中,c++调用python是将.py文件拷贝至c++项目目录下的,可能是在此目录中运行时,不知道用c++版qt的plugins库还是Python版qt的plugins库。因为是调用的Python脚本进行可视化,因此将python版本qt的plugins下的platforms下的三个库文件qminimal.dll、qoffscreen.dll、qwindows.dll,拷贝至c++项目下,问题解决。(事实上,只拷贝qwindows.dll文件即可)

(接昨天文)

今天早上重新运行c++调用python,发现又不行了,还是同样的报错,昨天复制的qwindows.dll不好使了。又整个重复了一圈,还是不行,环境变量改来改去,恢复原样,都不行。感觉整个人都不好了,浪费了一上午。看着网上别人贴的图,总感觉自己的PyQt5安装的和别人不一样,又在anaconda prompt中用命令重新安装了一遍。确切的说,之前没有正式安装PyQt5,只是安装anaconda时看到已经有了,就没另外安装。

pip install sip
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple

重新安装后,在site-package下多了这些文件夹。虽然看不懂,但感觉变化很大的样子。

 pyqt5_plugins\Qt\plugins下有两个库文件,pyqt5qmlplugin.dll和designer下的pyqt5.dll。

PyQt5\Qt\plugins下有一大批库文件,感觉和单独安装的c++版Qt下的plugins很像了。

前文说过,在Anaconda3\Library下也有一个plugins文件夹,感觉这些库很混乱。针对上面的报错,既然昨天复制C:\Program Files\Anaconda3\Library\plugins\platforms\qwindows.dll不能解决问题,就试一下C:\Program Files\Anaconda3\Lib\site-package\PyQt5\Qt\plugins\platforms\qwindows.dll,没想到就不报错了。再试昨天的qwindows.dll,竟然也不报错了。更可恶的时,两个qwindows.dll都不复制,也不报错了。天呐,我感觉被耍猴一样的,弄来弄去,结果好像什么都没发生一样。环境变量全删了,qwindows.dll也不用复制,问题就没有了。

我还是很糊涂,问题就消失了。说不定哪天又来一遍。

4.matplotlib依赖问题

好不容易,在vs2017中新建GUI项目,运行正常(使用Qt),在c++中调用python不再报错找不到平台文件库,但在调用过程中,matplotlib绘图没有反应。在eclipse下运行该python脚本,发现报错:

 File "C:\Program Files\Anaconda3\lib\site-packages\matplotlib\backends\qt_compat.py", line 138, in <module>
    from PyQt4 import QtCore, QtGui
ImportError: No module named 'PyQt4'

上网搜了一圈。

(1)https://my.oschina.net/u/4277354/blog/3283071,说matplotlib默认PyQt4,安装了PyQt5版本不兼容。在qt_compat.py下进行修改,添加rcParams['backend']='Qt5Agg',使默认使用PyQt5,但没有解决问题。

(2)https://blog.csdn.net/qq_18483627/article/details/88423745,说更新matplotlib,用命令:pip install upgrade matplotlib。

结果:Could not find a version that satisfies the requirement upgrade (from versions: )
No matching distribution found for upgrade

即:找不到满足升级需求的版本(来自版本:),没有找到适合升级的发行版。

(3)https://blog.csdn.net/baidu_36669549/article/details/106070138,说先更改matplotlib默认后台,然后再运行,问题解决。

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

5.PyQt5开发问题

from PyQt5 import QtCore,QtGui,QtWidgets

以上语句报错:

from PyQt5 import QtCore, QtGui, QtWidgets

ImportError: DLL load failed: 找不到指定的程序。

参照https://blog.csdn.net/qq_43145926/article/details/105217780,从https://www.python.org/downloads/windows/下载 Windows x86-64 executable installer,安装python3.5.2(我用的python版本),复制其中的python3.dll 至anaconda根目录下。问题解决

猜你喜欢

转载自blog.csdn.net/zhang1806618/article/details/109739060