MacOS下Qt 5开发环境安装与配置

最近笔者在MacOS中使用Qt Creator开发Qt程序时遇到了一些问题,在网上查了不少资料,都没有找到解决方案,只有自己进行研究摸索了,今天晚上终于将目前遇到的问题全部解决了,特记录下来分享给大家。

笔者使用的是MacOS 10.13.6和MacOS 10.15.7,前者为MBP笔记本,后者为虚拟机。笔者之前在虚拟机中安装过Qt5.14.2,在使用过程中并没出现最近遇到的问题,但最近在MBP笔记本中安装Qt5.14.2却出现了以下问题:

  1. Qt Creator界面设计器中的菜单不显示
  2. Qt菜单在MacOS中不显示
  3. 使用CMake构建系统时,智能提示有问题,Qt Creator中不能跳转打开Qt的头文件,报警告:
    Warning: The code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.

在这里插入图片描述
点“Show Details”按钮可以看到一些错误,比如:

error: 'QtWidgets/qtwidgetsglobal.h' file not found

在这里插入图片描述
下面笔者就从MacOS下的Qt 5开发环境的安装与配置开始介绍,然后再介绍如何解决上述问题。

一、下载Qt安装包

MacOS版本下载 qt-opensource-mac-x64-5.14.2.dmg
在这里插入图片描述

二、安装

1. 安装Xcode

在安装Qt之前,需要先安装Xcode,如果已经安装好了Xcode.app,则使用下面命令选择Xcode

$ sudo xcode-select --switch /Applications/Xcode.app

可以使用下面命令查看选择的Xcode

$ xcode-select -print-path
/Applications/Xcode.app/Contents/Developer

如果没有安装过Xcode.app,则可以使用下面的命令安装Xcode命令行工具

xcode-select --install

2. 安装Qt

安装时需要登录Qt账号,如果不想登录,可以在安装前断开网络链接,则安装程序会自动跳过登录进行安装。

在这里插入图片描述
默认会安装在用户目录下的Qt5.14.2中,也可以更改目录。

在选择安装组件的时候,可以根据需要进行选择:

在这里插入图片描述

笔者的MBP笔记本磁盘空间不大,所以仅选择了如下几项,需要1.44G的空间。

在这里插入图片描述

安装好后就可以运行Qt Creator了

在这里插入图片描述

三、创建项目

1.选择Qt Widgets Application

在这里插入图片描述

2. 选择CMake构建系统

在这里插入图片描述

3. 选择类信息

在这里插入图片描述

4. 选择翻译文件及语言

注意:这步非常重要,默认的情况下是没有语言,如果想要编写中文界面一定要选择中文,否则就会遇到中文菜单不能显示的问题

在这里插入图片描述

5. 选择Qt包

在这里插入图片描述

6. 选择版本控制系统

在Summary页可以选择版本控制系统,也可以保持默认,不选择

在这里插入图片描述

四、出现问题、解决问题

前面创建好项目后,就可以进行项目开发,不过笔者遇到了前述问题,下面一个一个来解决:

1. Qt Creator界面设计器中的菜单不显示

在这里插入图片描述

菜单中应该是文件的,但是在界面设计器中显示不出来,而且菜单设计栏最右边出现了一个双箭头按钮,这是因为菜单的默认字体太大了,笔者的默认为14号字体。

在这里插入图片描述

在属性中将menubar的字体设置小点,比如12号,就可以正常显示了:

在这里插入图片描述

2. Qt菜单在MacOS中不显示

前面我们在界面设计器中将菜单的字号设置成12号后,界面设计器中可以正常显示了,但是运行后,看不到菜单:

在这里插入图片描述

这是因为菜单项的文本是英文,也没有响应事件。需要将菜单项设置成中文(前面创建项目时需要选择翻译文件及语言为中文)

在这里插入图片描述

再将退出的响应事件添加上:

在这里插入图片描述

在这里插入图片描述

再次运行就要以看到菜单了:

在这里插入图片描述

关于此问题,网上很多资料都是说将menubarnativeMenuBar开关关掉:

在这里插入图片描述

虽然可以,但是并非MacOS的习惯。运行效果如下:

在这里插入图片描述

3. Warning: The code model could not parse an included file

报警告:
Warning: The code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.

智能提示不能正常工作,Qt Creator中不能跳转打开Qt头文件,Code Model在解析源码时报:
Lexical or Preprocessor Issue
error: 'QtCore/QVariant' file not found
error: 'QtWidgets/QAction' file not found
error: 'QtWidgets/QApplication' file not found
error: 'QtWidgets/QMainWindow' file not found
error: 'QtWidgets/QMenu' file not found
error: 'QtWidgets/QMenuBar' file not found

在这里插入图片描述

笔者在虚拟的MacOS 10.15.7中是没有出现,但在MBP中却出现了,笔者查过一些资料,网上很多的解决方案是不加载ClangCodeModel插件:

在这里插入图片描述

这就是一种掩耳盗铃的做法,让Qt Creator不再报警告,但是智能提示也不能正常工作,严重影响编码。

笔者想过编译器版本的问题,MacOS 10.13Clang 9

$ clang -v
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix

MacOS 10.15clang 12:

$ clang -v
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

但是编译运行都没问题,只是智能提示有问题。智能提示是使用的libclang或者clangd,都是基于clang的,肯定就是ClangCodeModel未能正确使用编译器在编译时的配置导致的。

对比查看Code Model相关信息:

在这里插入图片描述

没问题的Code Mode信息如下所示:

在这里插入图片描述

有问题的Code Mode如下所示:

在这里插入图片描述

通过对比,可以看到没问题的有多个FrameworkPath项,其中有指向Qt安装路径的(~/Qt5.14.2/5.14.2/clang_64/lib),而有问题的却没有,所以QT的头文件都会找不到:在这里插入图片描述

在MacOS中,Qt安装后的是以framework的形式存在的:

在这里插入图片描述

其中的头文件路径中并没有QtCoreQtWidgets这样的目录:

在这里插入图片描述

所以在MacOS中需要向编译器指定参数-iframework,这样编译器就可以自动搜索头文件路径了:

在这里插入图片描述

Qt CreatorCode Model信息是无法手动修改的,只能查看。它是通过Qmake或者CMake构建系统生成的信息来解析的。qmake没问题,那就很有可能是CMake的问题了。

再次对比CMake的版本,发现没问题的是CMake 3.25.1,而有问题的则是新版本3.28.1,我回退CMake版本到3.25.1版本,问题解决!更新到目前最新的3.29.1,依旧有问题。所以在新版本未解决之前,还是继续使用老版本吧!

当然这也许不是CMake的问题,而是CMake由于版本的升级,可能一些输出发生了变化,而Qt Creator版本比较老了,不支持新版本了。感兴趣的读者可以继续深究!

目前MacOS 10.15.7版本使用Qt 5.14.2开发就只有下面这个问题了:

Unable to create basic Accelerated OpenGL renderer.
Unable to create basic Accelerated OpenGL renderer.
Core Image is now using the software OpenGL renderer. This will be slow.

在这里插入图片描述

查资料说是由于Apple10.14开始把OpenGLAPI移除了,所以有此问题。目前还没有解决方案,知道的朋友可以留言分享!

如果此文对你有帮助,欢迎点赞收藏!

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

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

相关文章

java+saas模式医院云HIS系统源码Java+Spring+MySQL + MyCat融合BS版电子病历系统,支持电子病历四级

javasaas模式医院云HIS系统源码JavaSpringMySQL MyCat融合BS版电子病历系统,支持电子病历四级 云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务,提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员…

智慧公厕中的大数据、云计算和物联网技术引领未来公厕管理革命

现代社会对于公共卫生和环境保护的要求越来越高,智慧公厕作为城市基础设施建设的重要组成部分,正引领着公厕管理的革命。随着科技的不断进步,大数据、云计算和物联网技术的应用为智慧公厕带来了全新的可能性,(ZonTree中…

网站SEO关键词规划时如何筛选出合适的关键词?

在网站SEO优化过程中,关键词布局是一个至关重要的环节。首先,我们需要确定核心关键词,然后通过各种策略和方法对关键词进行扩展。完成关键词扩展后,接下来的任务就是对这些扩展后的关键词进行筛选。那么,如何进行有效的…

AI大模型之ChatGPT科普(深度好文)

目录 训练ChatGPT分几步? 如何炼成ChatGPT? 如何微调ChatGPT? 如何强化ChatGPT? 如何调教ChatGPT? AI思维链是什么? GPT背后的黑科技Transformer是什么? Transformer在计算机视觉上CV最佳作品? ChatGPT是人…

【C++】STL--vector

目录 vector的使用 vector的定义 vector iterator的使用 vector空间增长问题 vector增删查改 vector深度剖析及模拟实现 vector核心接口模拟实现 使用memcpy拷贝问题 迭代器失效问题 vector的使用 vector的定义 C中,vector是一个模版,第一个参…

【Qt踩坑】ARM 编译Qt5.14.2源码-QtWebEngine

1.下载源码 下载网站:Index of /new_archive/qt/5.14/5.14.2/single 2.QWebEngine相关依赖 sudo apt-get install flex libicu-dev libxslt-dev sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev sudo apt-get …

Netty实现udp服务器

1、TCP与UDP通信协议 网络传输层协议有两种,一种是TCP,另外一种是UDP。 TCP是一种面向连接的协议,提供可靠的数据传输。TCP通过三次握手建立连接,并通过确认和重传机制,保证数据的完整性和可靠性。TCP适用于对数据准…

OpenHarmony南向开发实例:【智能可燃气体检测系统】

样例简介 本项目是基于BearPi套件开发的智能可燃气体检测Demo,该系统内主要由小熊派单板套件和和MQ5可燃气体检测传感器组成。 智能可燃气体检测系统可以通过云和手机建立连接,可以在手机上控制感应的阈值,传感器感知到的可燃气体浓度超过阈…

美国B2985A是德科技高阻表

181/2461/8938产品概述: 特点: 0.01 fA最小测量分辨率10便士?1000 V电源下的最大电阻测量每秒20,000次读数分辨率为6.5位数的测量范围图形查看模式(仪表、图表、直方图和滚动视图)易于使用的自动导航功能可选择最佳范…

系统更新Javahome之后,eclipse ide没有同步更新的解决方案

1、确认eclipse idea当前使用jdk 路径 : 2、确认Ide路径为旧的之后,去到eclipse的应用启动路径,编辑【eclipse.ini】, 在【-vmargs】之前设置vm路径(换行为必须的): -vm C:\Program Files\Java\jdk1.8.0_1…

解决在嵌入式系统开发编译时遇到的“no definition for ‘xxx‘在xxx.o文件中”BUG

提示:本文章是自己折腾嵌入式系统开发过程学习记录 解决在嵌入式系统开发编译时遇到的“no definition for xxx在xxx.o文件中”BUG BUG描述一、编译开发环境开发语言和库 二、问题分析知识点说明函数声明:函数定义: 三、解决方案1. 检查函数声…

BP实战之猫狗分类数据集

目录 补充知识 python类里面的魔法方法 transforms.Resize() python里面的OS库 BP实战之猫狗分类数据集 猫狗数据集 注意事项 使用类创建自己的猫狗分类数据集 代码 实例化对象尝试 代码 结果 利用DataLoader加载数据集 BP神经网络的搭建以及对象的使用 运行结果…

HTTP与HTTPS:深度解析两种网络协议的工作原理、安全机制、性能影响与现代Web应用中的重要角色

HTTP (HyperText Transfer Protocol) 和 HTTPS (Hypertext Transfer Protocol Secure) 是互联网通信中不可或缺的两种协议,它们共同支撑了全球范围内的Web内容传输与交互。本文将深度解析HTTP与HTTPS的工作原理、安全机制、性能影响,并探讨它们在现代Web…

小程序项目思路分享爬虫

小程序项目思路分享爬虫 具体需求: 有这几个就行,门店名称门店地址门店类型,再加上省、市、县/区门店名称:storeName 门店地址:storeAddress 程序运行: honor_spider获取经纬度信息。 经纬度——>详…

SpringCloudAlibaba-整合sleuth和zipkin(六)

目录地址&#xff1a; SpringCloudAlibaba整合-CSDN博客 一、整合sleuth 1.引入依赖 在需要追踪的微服务中引入依赖&#xff0c;user、order、product <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…

java-数组转换为List集合

方法一&#xff1a;使用 Arrays.asList() 方法 Arrays.asList() 方法可以将数组转换为一个固定大小的List。 import java.util.Arrays; import java.util.List; import java.util.ArrayList; public class ArrayToListExample { public static void main(String[] args…

AI大模型引领未来智慧科研暨ChatGPT自然科学高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

数据结构——线性表(链式存储结构)

语言&#xff1a;C语言软件&#xff1a;Visual Studio 2022笔记书籍&#xff1a;数据结构——用C语言描述如有错误&#xff0c;感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列&#xff0c;对n>0&#xff0c;除第一元素无直接…

数据仓库与数据挖掘(第三版)陈文伟思维导图1-5章作业

第一章 概述 8.基于数据仓库的决策支持系统与传统决策支持系统有哪些区别&#xff1f; 决策支持系统经历了4个阶段。 1.基本决策支持系统 是在运筹学单模型辅助决策的基础上发展起来的&#xff0c;以模型库系统为核心&#xff0c;以多模型和数据库的组合形成方案辅助决策。 它…