qt使用笔记二:main.cpp详解

Qt中main.cpp文件详解

  • main.cpp是Qt应用程序的入口文件,包含程序的启动逻辑。下面我将详细解析其结构和功能。

基本结构

  • 一个典型的Qt main.cpp 文件结构如下:
#include <QApplication>  // 或者 QGuiApplication/QCoreApplication
#include "mainwindow.h"  // 主窗口头文件int main(int argc, char *argv[])
{// 1. 创建应用程序对象QApplication a(argc, argv);// 2. 创建主窗口对象MainWindow w;// 3. 显示主窗口w.show();// 4. 进入主事件循环return a.exec();
}

详细解析

    1. 应用程序对象创建
QApplication a(argc, argv);
QApplication:管理GUI应用程序的控制流和主要设置/*参数:
argc:命令行参数个数
argv:命令行参数数组替代类:
QGuiApplication:用于不需要QWidget的GUI应用
QCoreApplication:用于非GUI应用 */
    1. 主窗口创建
MainWindow w;    //创建应用程序的主窗口对象//MainWindow通常是继承自QMainWindow的自定义类
//在这一步可以初始化应用程序的各种组件
    1. 显示主窗口
w.show();    //调用show()方法使窗口可见//也可以使用w.showMaximized()或w.showFullScreen()等变体
    1. 进入事件循环
return a.exec();
exec()      //启动应用程序的事件循环//该方法会阻塞,直到应用程序退出
//返回值为应用程序的退出代码

高级用法

  • 命令行参数处理
QApplication a(argc, argv);// 设置应用程序信息
a.setApplicationName("MyApp");
a.setApplicationVersion("1.0.0");// 解析命令行参数
if (a.arguments().contains("--fullscreen")) {w.showFullScreen();
} else {w.show();
}
  • 全局样式设置
// 设置全局样式
a.setStyle("Fusion");// 设置调色板
QPalette palette;
palette.setColor(QPalette::Button, Qt::green);
a.setPalette(palette);// 设置字体
QFont font("Arial", 12);
a.setFont(font);
  • 多语言支持
QTranslator translator;
if (translator.load("myapp_zh_CN.qm", ":/translations")) {a.installTranslator(&translator);
}
  • 高DPI支持
// 启用高DPI缩放
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);// 使用高DPI图标
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);

实际项目中的常见扩展

  • 初始化检查:
if (!checkDependencies()) {qCritical() << "Missing dependencies";return -1;
}
  • 单例应用检查:
QSharedMemory shared("MyApp");
if (!shared.create(1)) {QMessageBox::warning(nullptr, "Warning", "Application already running");return 0;
}
  • 崩溃处理:
#ifdef Q_OS_WIN
SetUnhandledExceptionFilter(myCrashHandler);
#endif
  • 日志系统初始化:
QFile logFile("app.log");
logFile.open(QIODevice::WriteOnly);
qInstallMessageHandler(myMessageHandler);
  • 注意事项
- 必须在创建QApplication后才能使用GUI相关类- exec()是阻塞调用,之后的代码在程序退出后才会执行- 对于控制台应用,使用QCoreApplication- 现代Qt版本(5.14+)推荐使用QGuiApplication代替QApplication以获得更好的跨平台支持- main.cpp虽然简单,但它是Qt应用程序的起点,合理的初始化设置可以为后续开发奠定良好基础。

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

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

相关文章

如何构建船舵舵角和船的航向之间的动力学方程?它是一个一阶惯性环节吗?

提问 船舵和船的航向之间的动力学方程是什么&#xff1f;是一个一阶惯性环节吗&#xff1f; 回答 船舵和船的航向&#xff08;航向角&#xff09;之间的动力学关系并不是一个简单的一阶惯性环节&#xff0c;虽然在某些简化控制模型中可以近似为一阶系统。实际上&#xff0c;…

抖去推--短视频矩阵系统源码开发

一、开发短视频矩阵系统的源码需要以下步骤&#xff1a; 确定系统需求&#xff1a; 根据客户的具体业务目标&#xff0c;明确系统需实现的核心功能模块&#xff0c;例如用户注册登录、视频内容上传与管理、多维度视频浏览与推荐、用户互动&#xff08;评论、点赞、分享&#xf…

Windows 下搭建 Zephyr 开发环境

1. 系统要求 操作系统&#xff1a;Windows 10/11&#xff08;64位&#xff09;磁盘空间&#xff1a;至少 8GB 可用空间&#xff08;Zephyr 及其工具链较大&#xff09;权限&#xff1a;管理员权限&#xff08;部分工具需要&#xff09; 2. 安装必要工具 winget安装依赖工具&am…

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…

安全月报 | 傲盾DDoS攻击防御2025年5月简报

引言 在2025年5月&#xff0c;全球数字化进程高歌猛进&#xff0c;各行各业深度融入数字浪潮&#xff0c;人工智能、物联网、大数据等前沿技术蓬勃发展&#xff0c;进一步夯实了数字经济的基石。然而&#xff0c;在这看似繁荣的数字生态背后&#xff0c;网络安全威胁正以惊人的…

【Spring】Spring哪些源码解决了哪些问题P1

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 Spring是怎么处理请求的&#xff1f;Spring请求方…

坚持每日Codeforces三题挑战:Day 4 - 题目详解(2025-06-07,难度:1000, 1100, 1400)

前言&#xff1a; 此文章主要是记录每天的codeforces刷题&#xff0c;还有就是给其他打算法竞赛的人一点点点点小小的帮助&#xff08;毕竟现在实力比较菜&#xff0c;题目比较简单&#xff0c;但我还是会认真写题解&#xff09;。 之前忙学校事情&#xff0c;懈怠了一段时间…

6.7本日总结

一、英语 复习默写list10list19&#xff0c;07年第3篇阅读 二、数学 学习线代第一讲&#xff0c;写15讲课后题 三、408 学习计组第二章&#xff0c;写计组习题 四、总结 本周结束线代第一讲和计组第二章&#xff0c;之后学习计网4.4&#xff0c;学完计网4.4之后开操作系…

PGSR : 基于平面的高斯溅射高保真表面重建【全流程分析与测试!】【2025最新版!!】

【PGSR】: 基于平面的高斯溅射高保真表面重建 前言 三维表面重建是计算机视觉和计算机图形学领域的核心问题之一。随着Neural Radiance Fields (NeRF)和3D Gaussian Splatting (3DGS)技术的发展&#xff0c;从多视角RGB图像重建高质量三维表面成为了研究热点。今天我们要深入…

从认识AI开始-----AutoEncoder:生成模型的起点

前言 从15年开始&#xff0c;在深度学习的重要模型中&#xff0c;AutoEncoder&#xff08;自编码器&#xff09;可以说是打开生成模型世界的起点。它不仅是压缩与重建的工具&#xff0c;更是VAE、GAN、DIffusion等复杂生成模型的思想起源。其实AutoEncoder并不复杂&#xff0c;…

解决MySQL8.4报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

最近使用了MySQL8.4 , 服务启动成功,但是就是无法登陆,并且报错: ERROR 1524 (HY000): Plugin mysql_native_password is not loaded 使用如下的命令也报错 mysql -u root -p -P 3306 问题分析: 在MySQL 8.0版本中,默认的认证插件从mysql_native_password变更为cachi…

TDengine 开发指南——无模式写入

简介 在物联网应用中&#xff0c;为了实现自动化管理、业务分析和设备监控等多种功能&#xff0c;通常需要采集大量的数据项。然而&#xff0c;由于应用逻辑的版本升级和设备自身的硬件调整等原因&#xff0c;数据采集项可能会频繁发生变化。为了应对这种挑战&#xff0c;TDen…

嵌入式面试高频(5)!!!C++语言(嵌入式八股文,嵌入式面经)

一、C有几种传值方式之间的区别 一、值传递&#xff08;Pass by Value&#xff09; 机制&#xff1a;创建参数的副本&#xff0c;函数内操作不影响原始数据语法&#xff1a;void func(int x)特点&#xff1a; 数据安全&#xff1a;原始数据不受影响性能开销&#xff1a;需要复…

Spark 之 AQE

个人其他链接 AQE 执行顺序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 产生 AQE 的 循环触发点 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…

FSMC扩展外部SRAM

提示&#xff1a;文章 文章目录 前言一、背景二、2.12.2 三、3.1 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 2025年6月7日 19:34:48 今天看了FSMC扩展外部SRAM的文章&#xff0c;大概理解到stm32除了内部存储器&#xff0c;还可以扩展外部存储器。其中s…

【CSS-6】深入理解CSS复合选择器:提升样式表的精确性与效率

CSS选择器是前端开发的基石&#xff0c;而复合选择器则是其中最强大且实用的工具之一。本文将全面解析CSS复合选择器的类型、用法、优先级规则以及最佳实践&#xff0c;帮助你编写更高效、更精确的样式表。 1. 什么是复合选择器&#xff1f; 复合选择器是通过组合多个简单选择…

使用python实现奔跑的线条效果

效果&#xff0c;展示&#xff08;视频效果展示&#xff09;&#xff1a; 奔跑的线条 from turtle import * import time t1Turtle() t2Turtle() t3Turtle() t1.hideturtle() t2.hideturtle() t3.hideturtle() t1.pencolor("red") t2.pencolor("green") t3…

从零搭建uniapp项目

目录 创建uni-app项目 基础架构 安装 uni-ui 组件库 安装sass依赖 easycom配置组件自动导入 配置view等标签高亮声明 配置uni-ui组件类型声明 解决 标签 错误 关于tsconfig.json中提示报错 关于非原生标签错误&#xff08;看运气&#xff09; 安装 uview-plus 组件库…

Redis主从复制的原理一 之 概述

概述 本文概要性的介绍了Redis主从复制原理&#xff0c;及新旧版本主从复制的区别&#xff0c;优缺点。具体的主从复制过程可详见「Redis主从复制原理二 之 主从复制工作流程」 旧版主从复制的实现 Redis的复制功能分为 同步&#xff08;sync&#xff09;和 命令传播&#xff…

网络原理 4-TCP3

上篇文章&#xff0c;我们讲了TCP协议的连接管理&#xff08;”三次握手“和”四次挥手“的过程&#xff09;。 4、滑动窗口 这个滑动窗口是TCP中非常有特点的机制。我们知道&#xff0c;TCP是通过前面讲的三个机制&#xff1a;确认应答&#xff0c;超时重传&#xff0c;连接…