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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83994.shtml
英文地址,請注明出處:http://en.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;連接…