【Qt】项目代码

news2024/11/26 16:24:01

main.cpp文件

  • argc:命令行参数个数。
  • *argv[ ]:每一个命令行参数的内容。
  • main的形参就是命令行参数。
  • QApplication a(argc, argv)

编写一个Qt的图形化界面程序,一定需要QApplication对象。

  • widget w;

在创建项目的时候,勾选widget,创建了一个widget的类。

  • w.show();

创建一个控件对象,并显示出来。(.show()方法让控件显示出来,.hide()方法让控件隐藏,这俩种方法都是widget的父类Qwidget所提供的)。

  • exec()表示让程序执行起来。

当前Qt中的exec和Linux中的exec没有任何关系,只是名字相同,这样的设定在计算机中是比较常见的,同一种术语,在不同的场景,表示的含义不一样,需要结合上下文来理解。

widget.h文件

  • ifndef WIDGET_H
  • define WIDGET_H

header guard:保证头文件只被包含一次,更推荐写成#pragma once

  • class widget;声明一个类
  • public Qwidget;创建项目时,选择的父类

这里的父类是Qt SDK内置的,要想使用这个类,需要包含对应的头文件#include<Qwidget.h>。

        Qt的设定就是使用Qt内置的类,包含的头文件的名字就是和类名一致的,当然,并不是用到的所有的Qt的类都需要显示包含头文件。在C++中,头文件可能是“间接包含的”,就比如:引入了a.h,在a.h中又包含了b.h文件,此时,就相当于把a.h和b.h都包含了。

【注意】在后续写Qt代码的原则是,一个Qt的类,先进行使用,如果可以直接使用,说明对应的头文件已经被间接包含过了,无需显式包含,而如果这个类提示找不到定义,则需要手动的显式的把对应的头文件给包含。

  •  Q_OBJECT

Q_OBJECT是一个Qt内置的宏,宏和本质就是文本替换,而Q_OBJECT展开之后会生成一大堆的代码。

在Qt中有一个非常核心的机制,“信号和槽”,如果某个类向使用“信号和槽”就需要引入Q_OBJECT这个宏。

  • QWidge *parent = nullptr;

在Qt中引入了“对象树”机制。此时,如果创建一个Qt对象,就可以将这个对象挂到对象树上,然后往树上挂的时候需要值得“父节点”。这于数据结构中的“树”类似,一个节点,可以有N个节点,一个节点只能有一个父节点,此处对象树就是一个普通的N叉树(非二叉树)。

  • Ui::Widget *ui;和form file密切相关。

 widget.cpp文件

  • widget.h 创建项目生成的头文件
  • ui_widget.h form file 被qmake生成的头文件

  • 把form file生成的界面和当前widget关联起来。

widget.ui文件

当直接双击ui文件的时候,Qt Creator会调用Qt Designer,打开ui文件,此时就会打开图形化的界面编辑器。

  • 中间这部分是生成的程序窗口
  • 左边部分是Qt中内置的控件,拖拽左侧的控件到程序窗口可以创建具体的界面。
  • 右边部分是编辑属性,每一个控件都有很多的属性,就影响到控件具体的行为。

点击左侧编辑按钮,里面显式的就是.ui文件的本体内容。

这个格式称为xml格式,xml和html非常类似,都是使用成对的标签来表示数据。

html虽然也是通过标签来表示的,但是html的标签都是固定的,每一个标签的含义有一个专门的标准委员会约定,所有的浏览器也是按照同样的规则来解释的。

xml这里的标签,有哪些接口,都表示什么含义,这些都是可以自定义的。此处看到的这些标签,就是开发Qt的程序员来定义的。这里的标签含义具体是什么内容不需要关注,只要知道ui文件本质上是一个xml格式即可。

此处约定的xml标签的含义与Linux网络原理中的自定义应用层协议类似。

在Qt中使用xml文件就是描述程序的界面是什么样子的,然后qmake会调用相关的工具,依据这个xml文件生成一些C++代码。从而把完整的界面构造出来。

.pro文件

 这是Qt项目的工程文件,也是qmake工具构建时候的重要依据。

  •  要引入的Qt的模板,后续可能会被修改。

  • 按照C++11的标准进行编译

  • 描述了当前项目中,参与构建的文件都有哪些(编译器需要编译哪些文件),这个地方不需要手动修改,Qt creator会自动维护。

.pro文件类似于Linux中的make file文件。

Qt creator将过程中编译的细节都封装好,不需要过多的关注,只需要点击运行按钮,就可以直接编译通过。

总结

上述讲到的.h、.cpp、.pro、.ui文件都是源代码,如果编译运行Qt项目,构建过程还会生成一些中间文件。

打开文件资源管理器,看看项目对应的目录,在运行一次程序之后,就会在项目目录并列的地方,多出来一个“build_xxx”目录,这个目录里面就是该项目运行过程中,生成的一些临时文件。

makefile:编译Qt程序,还是会用到makefile,只不过这个makefile,不需要手动写,而是qmake自动生成的。

ui_widget.h就是widget.ui xml生成的.h文件。

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

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

相关文章

AI岗位平均月薪已经超过4.6万,程序员该如何抓住这个机遇?

前言 自从ChatGPT横空出世以来&#xff0c;市场上一直用“iPhone时刻”、“划时代”、“工业革命”等词汇来形容AI领域的飞速进展。如今&#xff0c;随着AI大模型的竞争日益激烈&#xff0c;这个领域正在以前所未有的速度向前发展。 AI大模型的革命性突破 OpenAI最新推出的G…

Linux--网络层IP

IP协议 IP协议&#xff0c;全称Internet Protocol&#xff08;互联网协议&#xff09;&#xff0c;是TCP/IP协议族中的核心协议之一&#xff0c;用于在互联网络上进行数据的传输。IP协议的主要功能是确保数据从一个网络节点&#xff08;如计算机、服务器、路由器等&#xff09…

【C++第11章】Vector

【C第11章】Vector vector介绍&#x1f9d0; vector是表示可变大小数组的序列容器&#xff0c;它类似于数组&#xff0c;但大小可以动态改变&#xff0c;并且大小会被容器自动处理。本质上说&#xff0c;vector使用动态分配数组来存储元素&#xff0c;为了减少扩容代价&#x…

音频剪辑软件哪个好用?音乐制作必备的6款音频剪辑工具

在这个充满声音的世界里&#xff0c;音乐和音频不仅仅是艺术表达的一种形式&#xff0c;更是情感的载体&#xff0c;是故事的讲述者。 你是否曾想过&#xff0c;那些令人动容的电影配乐、让人热血沸腾的电音节拍或是清晨唤醒你的温柔闹钟&#xff0c;是如何从一堆杂乱无章的声…

坐牢第二十三天 20240806(IO)

一.作业 1> 使用消息队列完成两个进程之间相互通信 A.c #include <myhead.h> // 要发送的消息类型 struct msgbuf {long mtype; /* message type, must be > 0 */char mtext[1024]; /* message data */ }; #define SIZE sizeof(struct msgbuf) - sizeof(l…

PEPM系统Cookie请求头远程代码执行漏洞复现 [附POC]

文章目录 PEPM系统Cookie请求头远程代码执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现PEPM系统Cookie请求头远程代码执行漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试,…

mem0ai+ollama+qwen2搭建中文版运行环境

准备模型 支持function的qwen2模型 随便找了一个&#xff0c;也可以下载其他支持function的模型&#xff0c;或者自己下载模型文件搭建 ollama run sam4096/qwen2toolsembedder 模型 ollama run nomic-embed-text拉取mem0ai 源码&#xff0c;切换对应分支 git clone https…

【Foundation】(三)transformers之Model

文章目录 1、介绍1.1、 模型类型1.2、Model Head 2、模型加载3、模型调用3.1、不带Model Head的模型调用3.2、带Model Head的模型调用 4、模型微调实战4.1、导包4.2、加载数据4.3、创建数据集4.4、划分数据集4.5、创建加载器4.6、创建模型以及优化器4.7、模型训练4.8、模型评估…

Figma 替代品 Excalidraw 安装和使用教程

如今远程办公盛行&#xff0c;一个好用的在线白板工具对于团队协作至关重要。然而&#xff0c;市面上的大多数白板应用要么功能单一&#xff0c;要么操作复杂&#xff0c;难以满足用户的多样化需求。尤其是在进行头脑风暴、流程设计或产品原型绘制时&#xff0c;我们常常会遇到…

linux入门到精通-第二十章-bufferevent(开源高性能事件通知库)

目录 参考bufferevent简单介绍工作流程事件Api新建事件节点 bufferevent_socket_new设置事件节点回调bufferevent_setcb使事件势能bufferevent_enable发送数据bufferevent_write接收数据bufferevent_read evconnlistener的简介 参考 视频教程 libevent的基本使用 libevent–bu…

HslCommunicationDemo各品牌Plc通信测试软件工具

目录 1、HslCommunicationDemo程序包 2、ModbusTCP举例说明 (0)概述 &#xff08;1&#xff09;线圈写操作 &#xff08;2&#xff09;寄存器写操作 3、C#工程中DLL库文件使用 &#xff08;1&#xff09;创建Winform程序工程 &#xff08;2&#xff09;写寄存器 1、HslC…

【Linux】匿名管道|命名管道|pipe|mkfifo|管道原理|通信分类|管道的特征和情况

目录 ​编辑 进程间通信 为什么要有进程间通信 进程通信的目的 进程间通信分类 如何理解通信 管道 匿名管道 管道原理 半双工 通信两问 pipe 演示 管道情况 管道的特征 命名管道 mkfifo指令 mkfifo接口 命名管道提供的是流式服务 匿名管道与命名管道的…

day08 1.进程间通信

work1.c #include <myhead.h> //要发送的消息类型 struct msgbuf {long mtype;char mtext[1024]; };#define SIZE sizeof(struct msgbuf)-sizeof(long)int main(int argc, const char *argv[]) {pid_t pid fork();if(pid -1){perror("fork error");return -…

Webpack入门基础知识及案例

webpack相信大家都已经不陌生了&#xff0c;应用程序的静态模块打包工具。前面我们总结了vue&#xff0c;react入门基础知识&#xff0c;也分别做了vue3的实战小案例&#xff0c;react的实战案例&#xff0c;那么我们如何使用webpack对项目进行模块化打包呢&#xff1f; 话不多…

RPA与智慧政务的关系

自1992年国务院明确提出构建全国行政机关办公决策系统&#xff0c;我国政府信息化建设已走过三十余年历程&#xff0c;并取得了阶段性成果&#xff0c;随着社会需求的变化以及信息技术和数字化工具的不断完善&#xff0c;人们对政府的信息化建设也提出了新的要求&#xff0c;推…

【C#语音文字互转】C#语音转文字(方法一)

Whisper.NET开源项目&#xff1a;https://github.com/sandrohanea/whisper.net/tree/main 一. 环境准备 在VS中安装 Whisper.net&#xff0c;在NuGet包管理器控制台中运行以下命令&#xff1a; Install-Package Whisper.net Install-Package Whisper.net.Runtime其中运行时包…

uniapp 实现自定义缩略滚动条

<template><view class"container-scroll"><!-- 文字导航 --><scroll-view class"scroll-view-text" scroll-x"true" v-if"type 1"><navigator:url"item.url"class"scroll-view-item"…

LE-50821F/FA激光扫描传感器|360°避障雷达之功能与连接使用说明

LE-50821F/FA激光扫描传感器|360避障雷达广泛应用于工业自动化、移动机器人应用场景中的环境感知、高精度定位&#xff08;如建图、扫描、避障、防护等&#xff09; LE-50xxxF系列升级扫描频率最高可达600KHz​​​​。 本文重点介绍LE-50821F/FA激光扫描传感器|360避障雷达之…

【C++】二维数组 数组名

二维数组名用途 1、查看所占内存空间 2、查看二维数组首地址 针对第一种用途&#xff0c;还可以计算数组有多少行、多少列、多少元素 针对第二种用途&#xff0c;数组元素、行数、列数都是连续的&#xff0c;且相差地址是有规律的 下面是一个实例 #include<iostream&g…

FreeRTOS基础入门——FreeRTOS的系统配置(三)

个人名片&#xff1a; ​ &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir202…