Qt开发 | Qmake与CMake | Qt窗口基类 | VS Qt项目与QtCreator项目相互转化 | Qt架构 | Qt学习方法

文章目录

  • 一、Qmake与CMake介绍
    • 1.Qmake
    • 2.CMake
    • 3.使用qmake还是cmake?
  • 二、Qt3个窗口基类的区别
  • 三、vs qt与QtCreator项目相互转化方法
    • 1.QtCreator项目转VS Qt
    • 2.VS Qt项目转QtCreator项目
  • 四、Qt架构介绍与学习方法详解

一、Qmake与CMake介绍

  Qmake和CMake都是构建系统,它们用于自动化编译和构建软件项目的过程。

1.Qmake

  Qmake是Qt独有的代码构建工具,主要用于Qt应用程序的构建。它是一个跨平台的构建系统,可以生成特定于平台的Makefile。Qmake使用一种名为Pro文件的脚本语言来定义项目的构建规则和依赖关系。Qmake的优势在于它与Qt紧密集成,可以自动处理Qt特有的构建需求,如MOC(Meta-Object Compiler)和UIC(User Interface Compiler)的调用。

特点

  • 专为Qt应用程序设计。
  • 支持跨平台构建。
  • 可以生成多种平台的Makefile。
  • 与Qt工具链紧密集成。

2.CMake

  CMake是C++通用的代码构建工具,它可以生成适用于多种编译器和平台的构建文件。CMake使用CMakeLists.txt文件来描述项目的构建过程,这些文件可以包含条件语句和循环,提供了更高的灵活性。CMake不仅限于C或C++项目,它也支持其他语言,并且可以与多种IDE(集成开发环境)和构建工具配合使用。

绝大多数C++开源项目都使用cmake管理代码,例如:obs、jsoncpp、libcurl、log4cplus等

特点

  • 跨平台,支持多种编译器和构建工具。
  • 使用CMakeLists.txt文件定义构建规则。
  • 支持条件语句和循环,提供高度灵活性。
  • 可以生成Makefile、Visual Studio解决方案文件等。
  • 广泛用于开源项目和大型软件项目。

3.使用qmake还是cmake?

  代码构建工具各有各的优势,不要过于纠结使用哪种,主要是看当初创建项目的人用哪种构建工具,不使用cmake也没关系,cmake也不是最好的解决方案,例如谷歌的GN,可以实现c++、java、ios项目的跨平台管理,比cmake厉害。qt项目若无特殊要求,使用qmake即可。

比较

  • 集成度:Qmake与Qt框架高度集成,而CMake更加通用。
  • 灵活性:CMake在构建配置方面提供了更多的灵活性。
  • 使用范围:Qmake主要用于Qt项目,CMake适用于各种类型的项目。
  • 跨平台性:两者都支持跨平台构建,但CMake在这方面更为广泛。

二、Qt3个窗口基类的区别

  • QMainWindow:包含菜单栏(QMenuBar)、工具栏(QToolBar)、状态栏(QStatusBar)和中心部件(central widget)。

    支持多文档界面(MDI),即在一个主窗口中可以打开多个文档窗口。常用于开发具有复杂界面的应用程序,如IDE、图像编辑器等。

    修改菜单栏与工具栏

    image-20240619132810653

    修改状态栏

    image-20240619134254052

    结果展示:

    image-20240619134231964

  • QWidget:基础窗口类

    一个普通的窗口,不包含菜单栏、状态栏,除了登陆界面,新建项目时建议使用QWidget,因为大部分的窗口可能都要做成无边框窗口,需要自定义标题栏,实现拉伸等;QMainWindow使用的场景不多

    image-20240619133035329

    image-20240619133056394

  • QDialog:对话框,常用来做登陆窗口、弹出窗口(例如设置界面)

    用于创建对话框。通常用于显示需要用户输入或确认的信息。常用于实现设置、选项、帮助等对话框。

    image-20240619134836343

    image-20240619134727279

    一般点击“登陆”后会跳到另一个窗口,因此,需要右击活动项目,点击“添加新文件”

    image-20240619135119339

    点击“Qt–>Qt设计器界面类”

    image-20240619135235593

    选择“Widget”界面模板,点击“下一步”

    image-20240619135340516

    点击“下一步”

    image-20240619135408773

    点击“完成”

    image-20240619135427857

    image-20240619135709161

    需要通过信号槽机制,实现当点击“登陆”按钮时,跳转到主窗口

三、vs qt与QtCreator项目相互转化方法

1.QtCreator项目转VS Qt

  首先,需要配置环境变量,将qmake.exe所在的目录输入到系统path。

image-20240619161410766

  然后,在cmd中输入转化命令:qmake -tp vc xxx.pro

image-20240619161737378

转化命令运行结果表明:出现cl命令冲突问题。

  解决办法是关闭cmd窗口,找到cl.exe路径配置到系统path中,再次打开cmd转换。

image-20240619162138950

image-20240619162320382

  转换后,用vs打开.vcxproj文件(双击),此时,项目属性中并没有Qt Project Settings。

image-20240619162812864

  此时,需要右键项目,找到“Qt”,点击“Convert custom build steps to Qt/MSBuild",再点击“是”。

image-20240619163113683

此时,项目属性中就出现Qt Project Settings。

image-20240619163326024

2.VS Qt项目转QtCreator项目

  在Qt VS Tools插件里点击“Create Basic.pro file”生成pro文件。image-20240619163939684

image-20240619164051431

image-20240619164131461

此时,会产生pri文件与pro文件。

image-20240619164350227

  再用QtCreator打开.pro文件(双击pro文件即可),选择构建套件

image-20240619164513824

image-20240619164648407

  将转换后的项目进行构建会失败

image-20240619164831884

此时,需要在QtCreator中添加模块

image-20240619165131102

四、Qt架构介绍与学习方法详解

  Qt不仅仅是一个界面库,它还有:

  • 数据容器:QString、QVector、QList、QMap
  • 网络模块:Http、TCP、UDP
  • 图形视图模块
  • 数据库模块
  • 程序打包

Qt常用控件

image-20240619174318533

Qt常用模块:通常Qt GUI项目需要包含:Core、Gui、Widgets这三个

image-20240619174833893

Qt学习方法

  • 多看Qt文档,自己多写代码测试;

  • 学习Qt提供的demo,自己调试,运行,分析;

  • Qt主要是用来做界面开发,要熟悉Qt设计界面的技巧,掌握各种控件的使用,非常熟悉各种布局的实现方案

    既要会用Qt设计器进行布局,又要非常熟悉手写布局;

    在做企业级项目时,很少用设计器(小项目),更多的是手写代码(企业级项目)

  • 熟悉无边框窗口的设计;

    后续会介绍无边框窗口的设计方法

  • 需要有一点界面交互的逻辑,例如自定义非标控件,以及各种样式表的使用;

    后续会进行介绍

  • 学习相关领域的知识,例如:图形图像、音视频、动画、Web交互、http编程、加解密;

  • 多总结,要有自己的代码库,以后遇到相同的模块需求,可以复用自己的代码;

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

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

相关文章

干货分享 | TSMaster 中不同总线报文消息过滤的操作方式

TSMaster软件平台支持对不同总线(CAN、LIN、FlexRay)报文和信号的过滤,包括全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤,针对不同的总线信号过滤器的使用方法基本相同。今天重点和大家分享一下关于TSMaster中报文…

全国首场以AI数字内容风控为主题的大会正式官宣,首批演讲嘉宾和议题揭晓!

曾经我们感叹的“AI迎来了iPhone时刻”,如今已变成“iPhone迎来了AI时刻”。前段时间,苹果全球开发者大会的召开,以及闻声而起的资本市场,无一不再次佐证了AI的无穷想象。 从OpenAI直播演示GPT-4o和谷歌的I/O开发者大会2024&…

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…

【linux学习十七】文件服务管理

一、FTP FTP server:FTP(File Transfer Protocol,文件传输协议 )是 TCP/IP 协议组中的协议之一 软件包&#xff1a;vsftpd/安装 yum -y install vsftpd//准备文件 touch /var/ftp/abc.txt //注释:FTP服务器的主目录:“/var/ftp/”&#xff0c;是FTP程序分享内容的本机目录…

数据库 复习题

有一个关系模式&#xff1a;工程关系&#xff08;工程号&#xff0c;工程名称&#xff0c;职工号&#xff0c;姓名&#xff0c;聘期&#xff0c;职务&#xff0c;小时工资率&#xff0c;工时&#xff09;&#xff0c;公司按照工时和小时工资率支付工资&#xff0c;小时工资率由…

【大数据】—二手车用户数据可视化分析案例

项目背景 在当今的大数据时代&#xff0c;数据可视化扮演着至关重要的角色。随着信息的爆炸式增长&#xff0c;我们面临着前所未有的数据挑战。这些数据可能来自社交媒体、商业交易、科学研究、医疗记录等各个领域&#xff0c;它们庞大而复杂&#xff0c;难以通过传统的数据处…

MySQL数据库(二):数据库基本操作

MySQL是一种流行的关系型数据库管理系统&#xff0c;广泛用于Web应用和各种数据存储需求。通过本次介绍&#xff0c;您将学习如何进行MySQL数据库的基本操作&#xff0c;包括创建数据库和表、插入和查询数据、更新和删除记录。这些基础知识将为您打下坚实的数据库操作基础。 目…

2023国家最高科学技术奖薛其坤院士:科学家的幸福感来自于哪里

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;2000字丨8分钟阅读 6 月 24 日&#xff0c;2023 年度国家最高科学技术奖在京揭晓&#xff0c;薛其坤院士荣获中国科技界崇高荣誉&#xff0c;这不…

【软件下载】Camtasia Studio 2024详细安装教程视频

习惯上来说Camtasia Studio是一款简单易用的高清录屏和视频编辑软件&#xff0c;拥有录制屏幕和配音、视频的剪辑和过场动画片、添加说明字幕和水印、制作视频封面和菜单、视频压缩和播放。不得不说Camtasia是一款屏幕录制和视频剪辑软件&#xff0c;教授课程&#xff0c;培训他…

字节跳动联手博通:5nm AI芯片诞生了?

字节跳动联手博通&#xff1a;5nm AI芯片诞生了&#xff1f; 前言 就在6月24日&#xff0c;字节跳动正在与美国博通合作开发一款5纳米工艺的专用集成电路(ASIC) AI处理器。这款芯片旨在降低采购成本并确保高端AI芯片的稳定供应。 根据报道&#xff0c;尽管芯片设计工作进展顺利…

力扣SQL50 即时食物配送 II min函数 嵌套查询

Problem: 1174. 即时食物配送 II &#x1f468;‍&#x1f3eb; 参考题解 Code -- 计算立即配送的订单百分比 select round (-- 计算订单日期与客户偏好配送日期相同的订单数量sum(case when order_date customer_pref_delivery_date then 1 else 0 end) * 100 /-- 计算总订…

【linux学习十六】网络管理

网络管理器(NetworkManager)是一个动态网络的控制器与配置系统&#xff0c;它用于当网络设备可用时保持设备和连接开启并激活 默认情况下&#xff0c;CentOS/RHEL7已安装网络管理器&#xff0c;并处于启用状态。 认识网卡 ens32 ens33 ens34 ens35 一.ip相关 查询网络状态 sy…

2005年下半年软件设计师【下午题】试题及答案

文章目录 2005年下半年软件设计师下午题--试题2005年下半年软件设计师下午题--答案 2005年下半年软件设计师下午题–试题 2005年下半年软件设计师下午题–答案

「全新升级,性能更强大——ONLYOFFICE 桌面编辑器 8.1 深度评测」

文章目录 一、背景二、界面设计与用户体验三、主要新功能亮点3.1 高效协作处理3.2 共同编辑&#xff0c;毫无压力3.3 批注与提及3.4 追踪更改3.5 比较与合并3.6 管理版本历史 四、性能表现4.1 集成 AI 工具4.2 插件强化 五、用户反馈与使用案例 一、背景 Ascensio System SIA -…

JVM-类加载机制

一、基础概念 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把该类加载到JVM。 其主要流程如下&#xff1a; 1.什么是类加载 那么什么是类加载&#xff1f; Java的类加载&#xff0c;就是把字节码格式“.class”文件加载到JVM的方法区…

48、基于深度学习的离群值输入向量(matlab)

1、基于深度学习的离群值输入向量原理及流程 基于深度学习的离群值检测的输入向量原理是通过神经网络模型对数据进行学习和表示&#xff0c;在该表示中探测异常样本。其流程大致如下&#xff1a; 数据预处理&#xff1a;将数据进行归一化处理&#xff0c;确保神经网络模型能够…

pycharm常用快捷键

详细总结了Pycharm的常用快捷键&#xff0c;下文介绍使用方法和场景, 并不需要记忆这些快捷键, 你只需要知道有这些快捷键, 再需要用的时候查看一下, 用的多了自然也就记住了,需要的朋友可以参考下 1.注释(添加/消除)(Ctrl /)这里说下Python的单行注释是 # , 多行注释是 注释内…

L59---101.对称二叉树(广搜)---Java版

1.题目描述 2.思路和知识点 &#xff08;1)根节点为空&#xff1a; 如果根节点为空&#xff0c;树是对称的。 (2)递归检查&#xff1a; isMirror 方法递归检查两个子树是否是镜像对称的。 (3)辅助函数 isMirror&#xff1a; 1)如果两个节点都为空&#xff0c;它们是镜像对称的…

react笔记-04redux篇

redux和react-redux笔记&#xff0c;以及项目中如何使用&#xff0c;对redux的封装&#xff0c;让其使用类似于vuex一样方便。 一、redux 1. redux工作流程 流程&#xff1a;创建action > dispatch分发action > 交给store > reducer加工数据返回给store 2. redux的…

LabVIEW在核磁共振实验室的应用

​核磁共振&#xff08;NMR&#xff09;实验室在进行复杂的核磁共振实验时&#xff0c;需要一个高效、灵活且易于操作的实验控制和数据采集系统。传统的NMR实验系统往往使用专门的硬件和软件&#xff0c;存在系统封闭、扩展性差、维护成本高等问题。为了解决这些问题&#xff0…