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

Qt中main.cpp文件详解

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

基本结构

  • 一个典型的Qt main.cpp 文件结构如下:
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. 应用程序对象创建
cpp 复制代码
QApplication a(argc, argv);
QApplication:管理GUI应用程序的控制流和主要设置

/*参数:
argc:命令行参数个数
argv:命令行参数数组

替代类:
QGuiApplication:用于不需要QWidget的GUI应用
QCoreApplication:用于非GUI应用 */
    1. 主窗口创建
cpp 复制代码
MainWindow w;    //创建应用程序的主窗口对象

//MainWindow通常是继承自QMainWindow的自定义类
//在这一步可以初始化应用程序的各种组件
    1. 显示主窗口
cpp 复制代码
w.show();    //调用show()方法使窗口可见

//也可以使用w.showMaximized()或w.showFullScreen()等变体
    1. 进入事件循环
cpp 复制代码
return a.exec();
exec()      //启动应用程序的事件循环

//该方法会阻塞,直到应用程序退出
//返回值为应用程序的退出代码

高级用法

  • 命令行参数处理
cpp 复制代码
QApplication a(argc, argv);

// 设置应用程序信息
a.setApplicationName("MyApp");
a.setApplicationVersion("1.0.0");

// 解析命令行参数
if (a.arguments().contains("--fullscreen")) {
    w.showFullScreen();
} else {
    w.show();
}
  • 全局样式设置
cpp 复制代码
// 设置全局样式
a.setStyle("Fusion");

// 设置调色板
QPalette palette;
palette.setColor(QPalette::Button, Qt::green);
a.setPalette(palette);

// 设置字体
QFont font("Arial", 12);
a.setFont(font);
  • 多语言支持
cpp 复制代码
QTranslator translator;
if (translator.load("myapp_zh_CN.qm", ":/translations")) {
    a.installTranslator(&translator);
}
  • 高DPI支持
cpp 复制代码
// 启用高DPI缩放
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

// 使用高DPI图标
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);

实际项目中的常见扩展

  • 初始化检查:
cpp 复制代码
if (!checkDependencies()) {
    qCritical() << "Missing dependencies";
    return -1;
}
  • 单例应用检查:
cpp 复制代码
QSharedMemory shared("MyApp");
if (!shared.create(1)) {
    QMessageBox::warning(nullptr, "Warning", "Application already running");
    return 0;
}
  • 崩溃处理:
cpp 复制代码
#ifdef Q_OS_WIN
SetUnhandledExceptionFilter(myCrashHandler);
#endif
  • 日志系统初始化:
cpp 复制代码
QFile logFile("app.log");
logFile.open(QIODevice::WriteOnly);
qInstallMessageHandler(myMessageHandler);
  • 注意事项
cpp 复制代码
- 必须在创建QApplication后才能使用GUI相关类

- exec()是阻塞调用,之后的代码在程序退出后才会执行

- 对于控制台应用,使用QCoreApplication

- 现代Qt版本(5.14+)推荐使用QGuiApplication代替QApplication以获得更好的跨平台支持

- main.cpp虽然简单,但它是Qt应用程序的起点,合理的初始化设置可以为后续开发奠定良好基础。
相关推荐
西飘客3 小时前
vs 怎么根据dll 生成lib文件
c++·qt
IvorySQL3 小时前
PostgreSQL 日报|修复截断 zstd 备份检测(10 月 9 日)
数据库·postgresql
刘胡子大叔4 小时前
SQL 脚本的导入顺序
数据库·sql
bkspiderx4 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
代码什么用4 小时前
Spring对IoC的实现
数据库·spring
qq_284274055 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
hz567896 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC6 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
程序员Sunday6 小时前
MySQL 为什么使用 B+ 树索引?把范围查询、回表和覆盖索引连起来
数据库·mysql
qq_284274057 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造