在Mac OS上使用Visual Studio Code创建C++ Qt的Hello World应用

引言
Qt是一个跨平台的应用程序和用户界面框架,而Visual Studio Code是一个功能强大的编辑器,两者结合可以极大地提升开发效率。本文将指导你在Mac OS上使用Visual Studio Code创建一个简单的Qt 'Hello World'窗口应用。

环境准备

  • 确保你的MacBook OS运行最新的操作系统。
  • 安装Homebrew,Mac OS的包管理器。
  • 通过Homebrew安装Qt:brew install qt
  • 安装Visual Studio Code。
  • 在Visual Studio Code中安装C++扩展。

创建Qt项目

1、使用Qt的qmake工具创建项目:

qmake -project "QT += widgets" -o .project
qmake

2、创建mainwindow.hmainwindow.cpp文件,实现窗口和主函数。

编写代码

  • mainwindow.h定义了窗口类。
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow
    {Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
    };#endif // MAINWINDOW_H
  • mainwindow.cpp实现了窗口的构造和析构。
    #include "mainwindow.h"
    #include <QApplication>
    #include <QLabel>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
    {setWindowTitle("Hello World");QLabel *label = new QLabel("Hello World", this);label->setGeometry(50, 50, 200, 50); // 位置和大小可以根据需要调整
    }MainWindow::~MainWindow()
    {// 析构函数
    }
  • main.cpp是程序的入口点,创建并显示MainWindow
    #include <QApplication>
    #include "mainwindow.h"int main(int argc, char *argv[])
    {QApplication app(argc, argv);MainWindow mainWindow;mainWindow.show();return app.exec();
    }

构建项目

  1. 确保.pro文件正确配置了项目设置和文件列表。
    QT       += core gui widgetsTARGET = hello
    TEMPLATE = appSOURCES += main.cpp \mainwindow.cppHEADERS += mainwindow.h
  2. 使用qmake生成Makefile
    qmake project.pro

  3. 使用make命令构建项目:
    make

运行应用
运行生成的可执行文件:

./hello.app/Contents/MacOS/hello
 

错误处理
如果在构建或运行过程中遇到问题,请检查:

  • 所有文件是否在正确的位置。
  • .pro文件是否包含了所有必要的源文件和头文件。
  • Qt和编译器的版本是否兼容。

总结
通过本文,你学会了如何在Mac OS上使用Visual Studio Code和Qt创建一个基本的'Hello World'窗口应用。这只是一个开始,Qt的强大功能等待着你去探索。

附加资源

  • Qt官方文档
  • Visual Studio Code官方教程

douxiaobo@192 helloworld_qt % code .
douxiaobo@192 helloworld_qt % qmake -project "QT += widgets" -o .project
douxiaobo@192 helloworld_qt % qmake
Usage: qmake [mode] [options] [files]QMake has two modes, one mode for generating project files based on
some heuristics, and the other for generating makefiles. Normally you
shouldn't need to specify a mode, as makefile generation is the default
mode for qmake, but you may use this to test qmake on an existing projectMode:-project       Put qmake into project file generation modeIn this mode qmake interprets [files] as files tobe added to the .pro file. By default, all files withknown source extensions are added.Note: The created .pro file probably will need to be edited. For example add the QT variable to specify what modules are required.-makefile      Put qmake into makefile generation mode (default)In this mode qmake interprets files as project files tobe processed, if skipped qmake will try to find a projectfile in your current working directoryWarnings Options:-Wnone         Turn off all warnings; specific ones may be re-enabled bylater -W options-Wall          Turn on all warnings-Wparser       Turn on parser warnings-Wlogic        Turn on logic warnings (on by default)-Wdeprecated   Turn on deprecation warnings (on by default)Options:* You can place any variable assignment in options and it will be ** processed as if it was in [files]. These assignments will be    ** processed before [files] by default.                            *-o file        Write output to file-d             Increase debug level-t templ       Overrides TEMPLATE as templ-tp prefix     Overrides TEMPLATE so that prefix is prefixed into the value-help          This help-v             Version information-early         All subsequent variable assignments will beparsed right before default_pre.prf-before        All subsequent variable assignments will beparsed right before [files] (the default)-after         All subsequent variable assignments will beparsed after [files]-late          All subsequent variable assignments will beparsed right after default_post.prf-norecursive   Don't do a recursive search-recursive     Do a recursive search-set <prop> <value> Set persistent property-unset <prop>  Unset persistent property-query <prop>  Query persistent property. Show all if <prop> is empty.-qtconf file   Use file instead of looking for qt6.conf, then qt.conf-cache file    Use file as cache           [makefile mode only]-spec spec     Use spec as QMAKESPEC       [makefile mode only]-nocache       Don't use a cache file      [makefile mode only]-nodepend      Don't generate dependencies [makefile mode only]-nomoc         Don't generate moc targets  [makefile mode only]-nopwd         Don't look for files in pwd [project mode only]
douxiaobo@192 helloworld_qt % make
make: *** No targets specified and no makefile found.  Stop.
douxiaobo@192 helloworld_qt % make project.pro
make: Nothing to be done for `project.pro'.
douxiaobo@192 helloworld_qt % qmake project.pro
Info: creating stash file /Users/douxiaobo/Documents/Practice in Coding/C++/helloworld_qt/.qmake.stash
WARNING: Failure to find: mainwindow.h
douxiaobo@192 helloworld_qt % qmake project.pro
WARNING: Failure to find: mainwindow.h
douxiaobo@192 helloworld_qt % qmake project.pro
douxiaobo@192 helloworld_qt % make
/Library/Developer/CommandLineTools/usr/bin/clang++ -c -pipe -stdlib=libc++ -O2 -std=gnu++1z  -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wall -Wextra -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AGL.framework/Headers -I/opt/homebrew/share/qt/mkspecs/macx-clang -F/opt/homebrew/lib -o main.o main.cpp
/Library/Developer/CommandLineTools/usr/bin/clang++ -c -pipe -stdlib=libc++ -O2 -std=gnu++1z  -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wall -Wextra -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AGL.framework/Headers -I/opt/homebrew/share/qt/mkspecs/macx-clang -F/opt/homebrew/lib -o mainwindow.o mainwindow.cpp
/Library/Developer/CommandLineTools/usr/bin/clang++ -pipe -stdlib=libc++ -O2 -std=gnu++1z  -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wall -Wextra -dM -E -o moc_predefs.h /opt/homebrew/share/qt/mkspecs/features/data/dummy.cpp
/opt/homebrew/share/qt/libexec/moc -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB --include '/Users/douxiaobo/Documents/Practice in Coding/C++/helloworld_qt/moc_predefs.h' -I/opt/homebrew/share/qt/mkspecs/macx-clang -I'/Users/douxiaobo/Documents/Practice in Coding/C++/helloworld_qt' -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1 -I/Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include -I/Library/Developer/CommandLineTools/usr/include -F/opt/homebrew/lib mainwindow.h -o moc_mainwindow.cpp
/Library/Developer/CommandLineTools/usr/bin/clang++ -c -pipe -stdlib=libc++ -O2 -std=gnu++1z  -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wall -Wextra -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AGL.framework/Headers -I/opt/homebrew/share/qt/mkspecs/macx-clang -F/opt/homebrew/lib -o moc_mainwindow.o moc_mainwindow.cpp
/Library/Developer/CommandLineTools/usr/bin/clang++ -stdlib=libc++ -headerpad_max_install_names  -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wl,-rpath,@executable_path/../Frameworks -Wl,-rpath,/opt/homebrew/lib -o hello.app/Contents/MacOS/hello  main.o mainwindow.o moc_mainwindow.o   -F/opt/homebrew/lib -framework QtWidgets -framework QtGui -framework AppKit -framework ImageIO -framework Metal -framework QtCore -framework IOKit -framework DiskArbitration -framework AGL -framework OpenGL   
douxiaobo@192 helloworld_qt % ./hello.app/Contents/MacOS/hello
douxiaobo@192 helloworld_qt % 

project.pro

QT += widgetsSOURCES += mainwindow.cpp

mainwindow.cpp

#include <QApplication>
#include <QMainWindow>int main(int argc, char *argv[]) {QApplication app(argc, argv);QMainWindow window;window.setWindowTitle("Hello World");window.show();return app.exec();
}

运行结果成功了。

命令行如下:

douxiaobo@192 helloworld_qt % qmake project.pro
douxiaobo@192 helloworld_qt % make
/Library/Developer/CommandLineTools/usr/bin/clang++ -c -pipe -stdlib=libc++ -O2 -std=gnu++1z  -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wall -Wextra -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I/opt/homebrew/lib/QtWidgets.framework/Headers -I/opt/homebrew/lib/QtGui.framework/Headers -I/opt/homebrew/lib/QtCore.framework/Headers -I. -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AGL.framework/Headers -I/opt/homebrew/share/qt/mkspecs/macx-clang -F/opt/homebrew/lib -o mainwindow.o mainwindow.cpp
/Library/Developer/CommandLineTools/usr/bin/clang++ -stdlib=libc++ -headerpad_max_install_names  -arch arm64 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=14.0 -Wl,-rpath,@executable_path/../Frameworks -Wl,-rpath,/opt/homebrew/lib -o project.app/Contents/MacOS/project  mainwindow.o   -F/opt/homebrew/lib -framework QtWidgets -framework QtGui -framework AppKit -framework ImageIO -framework Metal -framework QtCore -framework IOKit -framework DiskArbitration -framework AGL -framework OpenGL   
douxiaobo@192 helloworld_qt % ./project.app/Contents/MacOS/project
douxiaobo@192 helloworld_qt % 

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

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

相关文章

Effective C++ 改善程序与设计的55个具体做法笔记与心得 5

五. 实现 26. 尽可能延后变量定义式的出现时间 请注意: ‌‌‌‌  尽可能延后变量定义式的出现&#xff0c;这样做可增加程序的清晰度并改善程序效率。 解释&#xff1a; 增加程序的清晰度&#xff1a;这样可以让读者在第一时间内更好地理解变量的用途。变量定义在第一次使…

黑马苍穹外卖6 清理redis缓存+Spring Cache+购物车的增删改查

缓存菜品 后端服务都去查询数据库&#xff0c;对数据库访问压力增大。 解决方式&#xff1a;使用redis来缓存菜品&#xff0c;用内存比磁盘性能更高。 key :dish_分类id String key “dish_” categoryId; RestController("userDishController") RequestMapping…

批量重命名神器揭秘:一键实现文件夹随机命名,自定义长度轻松搞定!

在数字化时代&#xff0c;我们经常需要管理大量的文件夹&#xff0c;尤其是对于那些需要频繁更改或整理的文件来说&#xff0c;给它们进行批量重命名可以大大提高工作效率。然而&#xff0c;传统的重命名方法既繁琐又耗时&#xff0c;无法满足高效工作的需求。今天&#xff0c;…

transformers datasets

☆ 问题描述 在进行自然语言处理项目时&#xff0c;经常需要加载和处理不同的数据集。为了简化这一过程&#xff0c;我们可以使用datasets库来方便地加载、切分、查看和处理数据。本解决方案提供了如何使用datasets库加载、查看和处理数据的详细示例&#xff0c;包括如何加载在…

Java中的类加载器与热部署技术详解

Java中的类加载器与热部署技术详解 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在软件开发中&#xff0c;特别是在大型应用和服务的开发过程中&#xff0c;类…

ic基础|功耗篇03:ic设计人员如何在代码中降低功耗?一文带你了解行为级以及RTL级低功耗技术

大家好&#xff0c;我是数字小熊饼干&#xff0c;一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结&#xff0c;并通过汇总成文章的形式进行输出&#xff0c;相信无论你是在职的还是…

【C++PCL】点云处理稳健姿态估计配准

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的…

TI毫米波雷达可以用串口调试助理来获取原始数据吗?

摘要&#xff1a;本文介绍一下如何使用普通的串口调试助理来读取到AWR1843毫米波雷达的数据的。 使用的硬件如下图所示。 软件就是普通的串口助理&#xff0c;我用的是SSCOM&#xff0c;其他串口助理也是可以的&#xff0c;核心作用其实就是发送一行行的指令而已。 操作方法&am…

【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷二级真题(含答案)

2024-03 Python二级真题 分数&#xff1a;100 题数&#xff1a;37 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 期末考试结束了&#xff0c;全班的语文成绩都储存在列表score中&#xff0c;班主任老师请小明找到全班最高分&#xff0c;小明准备用…

20240623(26.0) 重要财经新闻

财经关注 ► 券商中国&#xff1a;北交所于6月21日晚间受理了3家企业的IPO申请。6月20日晚间&#xff0c;沪深交易所各受理了1家IPO申请。这也意味着&#xff0c;三大交易所IPO受理全部恢复。与此同时&#xff0c;三大交易所IPO上市委会议也已经全部重启。 ► 全球多地近期遭遇…

Linux开发讲课9--- Linux的IPC机制-内存映射(Memory Mapping)

Linux的IPC&#xff08;Inter-Process Communication&#xff0c;进程间通信&#xff09;机制是多个进程之间相互沟通的方法&#xff0c;它允许不同进程之间传播或交换信息。Linux支持多种IPC方式&#xff0c;包括但不限于&#xff1a; 管道&#xff08;Pipe&#xff09;&#…

微信小程序学习(六):常用原生 API

&#x1f517;API官方文档 1、网络请求 wx.request({// 接口地址&#xff0c;仅为示例&#xff0c;并非真实的接口地址url: example.php,// 请求的参数data: { x: },// 请求方式 GET|POST|PUT|DELETEmethod: GET,success (res) {console.log(res.data)},fail(err) {console.…

msvcp140.dll丢失的解决方法,msvcp140.dll丢失下载办法

一、msvcp140.dll丢失或损坏的影响 系统更新影响 系统更新是导致msvcp140.dll丢失或损坏的常见原因之一。在自动更新过程中&#xff0c;可能会引入与现有应用程序不兼容的DLL版本&#xff0c;从而引发错误。根据用户反馈和技术支持数据&#xff0c;大约15%的msvcp140.dll问题…

2-3KW户储、家储逆变器设计资料

储能电源方案双向逆变器板资料&#xff0c;原理文件&#xff0c;PCB文件&#xff0c;源代码&#xff0c;bom清单。 bom表&#xff1a; PCB&#xff1a; 变压器电感 2-3KW户储、家储逆变器设计通常需要考虑以下几个方面&#xff1a; 输入电压范围&#xff1a;逆变器需要能够适应…

接口性能优化方法总结

接口性能优化是后端开发人员经常碰到的一道面试题&#xff0c;因为它是一个跟开发语言无关的公共问题。 这个问题既可以很简单&#xff0c;也可以相当复杂。 导致接口性能问题的原因多种多样&#xff0c;不同项目的不同接口&#xff0c;其原因可能各不相同。 下面列举几种常…

2024-6-18(沉默Spring,Springboot)

1.Spring小结 我们最后再来体会一下用 Spring 创建对象的过程&#xff1a; 通过 ApplicationContext 这个 IoC 容器的入口&#xff0c;用它的两个具体的实现子类&#xff0c;从 class path 或者 file path 中读取数据&#xff0c;用 getBean() 获取具体的 bean instance。 那…

oracle发送https请求

参照 https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/u_http.htm#i1025869 https://docs.oracle.com/cd/E11882_01/network.112/e40393/asowalet.htm#ASOAG160 https://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_networkacl_adm.htm#ARPLS148 https://d…

Tailwindcss 提取组件

背景 随着项目的发展&#xff0c;您不可避免地会发现自己需要重复使用常用样式&#xff0c;以便在许多不同的地方重新创建相同的组件。这在小组件&#xff08;如按钮、表单元素、徽章等&#xff09;中最为明显。在我的项目中是图表标题样式如下&#xff1a; <div class&qu…

基于Openmv的色块识别代码及注意事项

在给出代码之前我先说注意事项以及需要用到的函数 1、白平衡和自动增益的关闭 打开白平衡和自动增益会影响颜色识别的效果&#xff0c;具体影响体现在可能使你颜色阈值发生改变 关闭代码如下 sensor.set_auto_gain(False) #关闭自动增益 sensor.set_whitebal(False) …

喜报!极限科技新获得一项国家发明专利授权:“搜索数据库的正排索引处理方法、装置、介质和设备”

近日&#xff0c;极限数据&#xff08;北京&#xff09;科技有限公司&#xff08;简称&#xff1a;极限科技&#xff09;新获得一项国家发明专利授权&#xff0c;专利名为 “搜索数据库的正排索引处理方法、装置、介质和设备”&#xff0c;专利号&#xff1a;ZL 2024 1 0479400…