QT工程概述

news2025/1/15 7:57:32

在Qt中,创建 "MainWindow" 与 "Widget" 项目的主要区别在于他们的用途和功能范围:

  1. MainWindow:这是一个包含完整菜单栏、工具栏和状态栏的主窗口应用程序框架。它适合于更复 杂的应用程序,需要这些额外的用户界面元素来提供丰富的功能和交互。
  2. Widget:这通常是一个简单的窗口,没有内置的菜单栏、工具栏或状态栏。它适合于更简单或专用 的应用程序,不需要复杂的用户界面组件。

MainWindow提供了更全面的框架,而Widget则更适合简单、专注的界面。 

QApplication 

 #include "widget.h"
 #include <QApplication>
 int main(int argc, char *argv[])
 {
 QApplication a(argc, argv);
 Widget w;
 w.show();
 return a.exec();
 }

在Qt应用程序中, QApplication a(argc, argv); 这行代码的作用是创建一个 QApplication 类的 实例。这是几乎每个Qt应用程序必须做的第一步,因为它负责管理应用程序的许多核心功能。

下表总结了 QApplication 类在Qt框架中的主要功能和职责: 

QApplication 是Qt应用程序的核心,它为应用程序提供了必要的环境和框架,确保GUI组件能够正常 工作并响应用户的操作。

简而言之, QApplication a(argc, argv); 用于初始化Qt应用程序的环境,设置事件循环,并准备应 用程序处理GUI事件。 

GUI代表图形用户界面(Graphical User Interface)。它是一种用户界面,允许用户通过图形图标 和视觉指示器(如按钮、标签、窗口等)与电子设备交互,而不是仅仅使用文本命令。GUI使得软 件应用程序更加直观和易于使用,因为它提供了视觉导向的操作方式,用户可以通过点击、拖拽和 输入来操作界面元素,而不需要记忆和输入复杂的命令。GUI是现代计算机和移动应用程序的标准 用户界面类型。 

return a.exec()

在Qt应用程序中, QApplication::exec() 函数是用来启动应用程序的事件循环的。当你调用这个函数 时,它会开始处理和分发事件,如用户的点击、键盘输入等。这个函数会一直运行,直到事件循环结 束,通常是因为调用了 QApplication::quit() 函数或者关闭了应用程序的主窗口。简而言之, exec() 是Qt程序中的主循环,负责监听和响应事件,保持应用程序运行直到用户决定退出。 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

 

Q_OBJECT

Q_OBJECT 宏是Qt框架中一个非常重要的宏,用于启用Qt对象的元对象系统。当你在Qt中定义一个类 时,如果这个类继承自 QObject 或其子类,并且你想使用Qt的信号和槽机制、国际化、属性系统或其他 Qt元对象系统提供的功能,就必须在类定义中包含 Q_OBJECT 宏。

这个宏允许Qt的元对象编译器(moc)识别并处理这个类,生成额外的代码,这些代码是实现信号和槽 机制以及其他元对象功能所必需的。简单地说, Q_OBJECT 宏为Qt类提供了额外的元数据,使得类能够 完全利用Qt框架的功能。 

QT_BEGIN_NAMESPACE

QT_BEGIN_NAMESPACE 是Qt框架中用于支持命名空间的宏定义。Qt使用这些宏来确保其库中的类和函数不会与其他库中的同名类和函数冲突。 QT_BEGIN_NAMESPACE 宏在定义Qt类和函数之前使用,用来指定接下来的代码位于Qt的命名空间中。它通常与 QT_END_NAMESPACE 配对使用,后者标志着命名空间的结束。这种机制对于在大型项目中维护代码的清晰度和防止命名冲突非常重要。 

namespace Ui { class Widget; }

在Qt框架中, namespace Ui { class Widget; } 是一种常见的用法,通常出现在使用Qt Designer设 计GUI时自动生成的代码中。这里的 Ui 是一个命名空间,而 class Widget 是一个向前声明,它声明了一个名为 Widget 的类。这种做法允许你在 class Widget 是一个前向声明,它声明 .cpp 源文件中引用由Qt Designer创建的UI界面,而不需 要在头文件中包含完整的UI类定义。这种分离的方法有助于减少编译依赖性并保持代码的清晰和组织。 在你的源文件中,你会创建一个 Ui::Widget 类型的对象来访问和操作UI组件。

简单来说就是,你使用了Qt Designer(用鼠标写代码),不再需要在.cpp中进行引入,可以直接使用按钮之类的(只需要ui->pushButton;)

#include "mainwindow.h"
#include "./ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow) //初始化列表构造
{
    ui->setupUi(this);//设置QT designer里面的ui关联到widget类的私有变量ui里面
}

MainWindow::~MainWindow()
{
    delete ui;
}

Widget::Widget(QWidget *parent) : QWidget(parent),ui(new Ui::Widget) 

代码 : QWidget(parent) 是初始化列表,用于调用基类 它。 ui(new Ui::Widget) 是初始化类内部的 QWidget 的构造函数,并将 parent 传递给 ui 成员变量,这是通过 new 关键字动态分配的。 Ui::Widget 是由Qt Designer工具生成的,用于处理用户界面。这种方式允许将用户界面的设计与后端 逻辑代码分离,有助于提高代码的可维护性和可读性。 

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

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

相关文章

Java | Leetcode Java题解之第479题最大回文数乘积

题目&#xff1a; 题解&#xff1a; class Solution {public int largestPalindrome(int n) {if (n 1) {return 9;}int upper (int) Math.pow(10, n) - 1;int ans 0;for (int left upper; ans 0; --left) { // 枚举回文数的左半部分long p left;for (int x left; x >…

uni-app关闭底部系统导航栏的控制按钮BUG

描述 plus.navigator.hideSystemNavigation(); 在uni-app中使用 plus.navigator.hideSystemNavigation(); 关闭导航栏时会出bug会留下一个黑框。这个bug基于手机&#xff1b; 平板的性能来决定出bug频率原因是&#xff1a;过早启用霸屏导致的&#xff08;过早使用plus.navig…

执行vue create XXX报错The operation was rejected by your operating system

创建项目&#xff1a; vue create my-project 报错&#xff1a; npm ERR! code EPERM npm ERR! syscall open npm ERR! path D:\Program Files\nodejs\node_cache\_cacache\tmp\5d2a6f8e npm ERR! errno -4048 npm ERR! Error: EPERM: operation not permitted, open D:\Pro…

18933 括号匹配问题

### 思路 1. **输入处理**&#xff1a;读取输入的字符串。 2. **匹配括号**&#xff1a;使用栈来匹配括号&#xff0c;记录无法匹配的左括号和右括号的位置。 3. **标注输出**&#xff1a;根据记录的位置&#xff0c;生成标注字符串&#xff0c;输出原始字符串和标注字符串。 …

车辆损伤评估数据集(提供分割和检测两种标注方式)6类4000张高分辨率图共9000余标注,6GB数据量

车辆损伤评估数据集&#xff08;提供分割和检测两种标注方式&#xff09; 标注类型包括 dent: 凹痕 scratch: 划痕 crack: 裂缝 glass shatter: 玻璃破碎 tire flat: 轮胎扁平 lamp broken: 车灯损坏 4000张高分辨率图共9000余标注&#xff0c;6GB数据量 车辆损伤评估数据集介…

复合泊松过程

复合泊松过程的均值、方差与特征函数 复合泊松过程的定义 复合泊松过程 ( Y(t) ) 是一种常见的随机过程&#xff0c;通常定义为&#xff1a; Y ( t ) ∑ k 1 N ( t ) X k Y(t) \sum_{k1}^{N(t)} X_k Y(t)k1∑N(t)​Xk​ 其中&#xff1a; ( N(t) ) 是一个强度为 ( \lambd…

IP地址与CDN提升网络速度

视频流媒体、在线游戏、或是电商购物&#xff0c;互联网在我们的工作生活中愈加不可或缺&#xff0c;人们对于网络的加载速度要求也越来越严苛。而IP地址与CDN的协同工作&#xff0c;对于互联网速度增加与稳定起这重大的作用。 一、CDN的工作原理 CDN是由分布在全球各地的服务…

P1439 【模板】最长公共子序列 Python 题解

【模板】最长公共子序列 题目描述 给出 1 , 2 , … , n 1,2,\ldots,n 1,2,…,n 的两个排列 P 1 P_1 P1​ 和 P 2 P_2 P2​ &#xff0c;求它们的最长公共子序列。 输入格式 第一行是一个数 n n n。 接下来两行&#xff0c;每行为 n n n 个数&#xff0c;为自然数 1 …

Shell脚本:分发文件到各个集群节点

找一个全局目录/root/bin 写脚本 touch xsync chmod 777 xsync #!/bin/bash#作者&#xff1a;ldj #时间&#xff1a;2024-10-15 #描述&#xff1a;拷贝文件#1. 判断参数个数 if [ $# -lt 1 ]thenecho "Error: Not Enough Argument!"exit fi#2.遍历集群所有机器 spac…

工业和建筑工地 安全帽-安全带识别数据集 yolo数据集 共2200张 已增强 标注

安全帽-安全带识别数据集 yolo数据集 共2200张 已增强 安全帽检测与安全带识别数据集 图像数量&#xff1a;2,200张增强后标注数量&#xff1a; belt&#xff08;安全带&#xff09;&#xff1a;3,197个head&#xff08;头部&#xff09;&#xff1a;326个helmet&#xff08;安…

asp.net Core 自定义中间件

内联中间件 中间件转移到类中 推荐中间件通过IApplicationBuilder 公开中间件 使用扩展方法 调用中间件 含有依赖项的 》》》中间件 参考资料

数据结构——排序(1)

数据结构——排序(1) 文章目录 数据结构——排序(1)一、排序1.概念&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 2.运用&#xff1a;购物筛选排序&#xff0c;院校排名等。 3.常见排…

业务的合并与分批

1.你中有我&#xff0c;我中有你 2.合久必分&#xff0c;分久必合 3.正负负正&#xff0c;正道无穷

MRI学习笔记-LItool使用教程,计算偏侧化指数lateralization index

偏侧化指数介绍 描述功能偏侧化最常用的方法之一是计算偏侧化指数&#xff0c;分别是左侧和右侧感兴趣区域&#xff08;ROI&#xff09;中值高于特定激活阈值的体素数。因此&#xff0c;LI值的范围从1&#xff08;左主导&#xff09;到1&#xff08;右主导&#xff09;。然而&…

AtCoder Beginner Contest 375 A-E 题解

我的老师让我先做最后再交&#xff0c;看正确率&#xff08;即以OI赛制打abc&#xff09; 所以我用的小号&#xff08;… …&#xff09; C 卡了老半天才出来&#xff0c;我把题读错了 难度&#xff1a; A. Seats 题意 给你一个字符串 S S S&#xff0c;仅包含 . 和 #&…

unity 调整skinweight (皮肤权重),解决:衣服穿模问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、skinweight 是什么&#xff1f;二、代码控制&#xff1a;可根据平台切换1.引入库 总结 前言 最近遇到一个问题&#xff0c;人物模型的衣服穿模&#xff08…

本地拉取Docker镜像打包导入远程服务器

起因是因为使用远程服务器拉取镜像时&#xff0c;由于网络问题一直拉不成功&#xff0c;使用国内镜像由于更新不及时&#xff0c;国内镜像没有最新的 docker 镜像。最后使用本地的计算机&#xff0c;通过代理下载最新的镜像后打包成 tar&#xff0c; 然后上传到远程服务器进行导…

interwirelessac9560感叹号,电脑无法连接wifi,无法搜索到wifi

interwirelessac9560感叹号 电脑无法连接wifi&#xff0c;无法搜索到wifi 原因 这可能是wifl模块出现了问题。 解决方案 1、winx 打开&#xff0c;选择【设备管理器】 2、选择网络适配器 右键打开wireless-AC&#xff0c;选择【卸载设备】。 3、关机2分钟后&#xff0c…

计算机网络-VRRP实验配置

前面我们大致学习了VRRP的概念和基本原理&#xff0c;但是网络这块就是要多敲命令多用才能印象深刻&#xff0c;今天开始进行一些实验配置&#xff0c;结合日常工作的场景分析VRRP在实际工作中的应用。 一、典型VRRP虚拟网关拓扑 相比于传统单网关&#xff0c;采用VRRP虚拟网关…

Forward Chaining(前向链推理)

这是一个 Forward Chaining&#xff08;前向链推理&#xff09; 的例子&#xff0c;用于在给定的命题逻辑规则集下&#xff0c;从已知的事实推导出新结论。图示右侧显示了推理过程的依赖关系图&#xff0c;左侧是规则和初始事实。 我们有以下命题逻辑规则和已知的事实&#xf…