QT創建項目(項目模板、構建系統、選擇類、構建套件)

1. 項目模版

項目類型界面技術適用場景核心依賴模塊開發語言
Qt Widget ApplicationC++ Widgets傳統桌面應用(復雜控件)Qt WidgetsC++
Qt Console Application無 GUI命令行工具、服務Qt CoreC++
Qt Quick ApplicationQML/Quick現代跨平臺應用(動畫/觸摸)Qt QuickQML + C++
Qt Quick (compat)QML(舊版兼容)遷移舊版 Qt Quick 項目到 Qt 6Qt Quick + QtQuick.CompatQML + C++

2. 構建系統?

qmake是Qt自帶的構建工具,專門為Qt項目設計,簡化了項目的配置過程。而CMake是一個跨平臺的構建系統生成器,支持更廣泛的項目類型,不僅僅是Qt。

工具定位開發者主要用途
qmakeQt 官方早期構建工具,專為 Qt 項目優化Qt 團隊生成平臺相關的 Makefile 或項目文件
CMake跨平臺構建系統生成器,支持多種編譯器和項目類型(不限于 Qt)Kitware生成平臺無關的構建文件(如 Makefile、Visual Studio 項目)
工具優點缺點
qmake- 簡單易學
- 與 Qt 深度集成
- 快速配置小型項目
- 功能有限
- 跨平臺支持較弱
- 已過時
CMake- 跨平臺工業標準
- 強大的擴展性
- 活躍的社區支持
- 學習曲線陡峭
- 配置復雜度較高

項目從?qmake?遷移到?CMake?時,除了?.pro?和?CMakeLists.txt?文件的差異,項目中的?代碼本身通常不需要修改,但某些與構建系統相關的代碼或配置可能需要調整?。

qmake 項目文件(.pro):?

# 指定 Qt 模塊
QT += core gui widgets# 項目名稱
TARGET = MyApp# 源文件
SOURCES += main.cpp \mainwindow.cpp# 頭文件
HEADERS += mainwindow.h# 資源文件
RESOURCES += icons.qrc# 條件編譯(平臺相關)
win32 {LIBS += -luser32
} else {LIBS += -lpthread
}

等效的 CMakeLists.txt

# 指定 CMake 最低版本
cmake_minimum_required(VERSION 3.16)# 定義項目名稱和語言
project(MyApp LANGUAGES CXX)# 查找 Qt 模塊
find_package(Qt6 COMPONENTS Core Gui Widgets REQUIRED)# 添加可執行文件
add_executable(MyAppmain.cppmainwindow.cppmainwindow.h
)# 處理 Qt 資源文件
qt_add_resources(MyApp "resources"PREFIX "/"FILES icons.qrc
)# 鏈接 Qt 庫
target_link_libraries(MyApp PRIVATEQt6::CoreQt6::GuiQt6::Widgets
)# 平臺特定配置
if(WIN32)target_compile_definitions(MyApp PRIVATE WINDOWS)
elseif(UNIX)target_compile_definitions(MyApp PRIVATE LINUX)
endif()

3. 選擇類

QMainWindow是主窗口類,通常用于應用程序的主界面,包含菜單欄、工具欄、狀態欄等。QWidget是所有用戶界面對象的基類,可以作為其他窗口或控件的容器。

QDialog是對話框類,用于短期交互,比如打開文件或設置選項。

三個類的繼承關系。

QMainWindow和QDialog都是QWidget的子類,但各自有不同的擴展功能。

QMainWindow提供了標準的應用程序框架,

而QDialog則專注于對話框的特定行為,比如模態和非模態。

QWidget適合作為自定義控件或簡單窗口,而QMainWindow適合復雜的主界面。

特性QWidgetQMainWindowQDialog
繼承關系所有控件的基類繼承自?QWidget繼承自?QWidget
預設組件菜單欄、工具欄、狀態欄對話框按鈕布局
窗口修飾可選標題欄完整標題欄(最大化/最小化)簡化標題欄(無最大化)
典型用途簡單窗口或子控件應用程序主界面彈窗、配置窗口
模態支持需手動實現無內置支持支持模態(exec()
返回值機制可返回?Accepted/Rejected

1. 主界面開發?→?QMainWindow

  • 需要菜單欄、工具欄或停靠窗口的復雜應用。

2. 短期交互彈窗?→?QDialog

  • 如文件選擇、設置選項、消息提示。

3. 自定義控件或簡單窗口?→?QWidget

  • 作為子控件容器,或不需要復雜框架的獨立窗口。

?4. 構建套件

MSVC是微軟的Visual C++編譯器,主要用于Windows平臺,和Visual Studio集成。而MinGW是Minimalist GNU for Windows的縮寫,提供了GNU工具鏈在Windows上的移植,可以生成原生Windows應用,但使用的是GNU的工具鏈。

MSVC通常需要安裝Visual Studio,而MinGW可能更輕量。MSVC是商業使用可能需要授權,而MinGW是開源的。

特性MSVC(Microsoft Visual C++)MinGW(GNU for Windows)
開發者微軟(Microsoft)GNU 社區 + MinGW 項目
編譯器基礎微軟的閉源編譯器(集成于 Visual Studio)GNU GCC 的 Windows 移植版(開源)
兼容性僅 Windows跨平臺支持(通過 GCC)
運行時庫依賴依賴?MSVCRT(需安裝 VC++ Redistributable)依賴?MinGW 運行時庫(靜態或動態鏈接)
調試工具深度集成 Visual Studio 調試器支持 GDB(需手動配置)
C++ 標準支持緊跟最新標準(如 C++20),更新快更新較慢(依賴 GCC 版本)
性能優化針對 Windows 高度優化,生成代碼效率高通用優化,可能略遜于 MSVC
授權協議閉源(需 Visual Studio 授權,社區版免費)開源(GPL/LGPL)
Qt 官方支持優先支持,預編譯包完善支持,但部分模塊可能需自行編譯
部署便捷性需分發 VC++ 運行時庫(或靜態鏈接)可靜態編譯,減少依賴

1. 推薦使用 MSVC 的情況

  • 開發 Windows 專用應用:需要深度集成 Windows API(如 DirectX、COM 組件)。

  • 依賴 Visual Studio 生態:使用 Visual Studio 的調試器、性能分析工具。

  • 企業級開發:需要官方支持、長期維護的編譯器。

  • 追求性能:MSVC 生成的代碼在 Windows 上通常更高效。

2. 推薦使用 MinGW 的情況

  • 跨平臺開發:希望代碼在 Linux/macOS 和 Windows 間無縫移植(使用同一工具鏈)。

  • 開源項目:需遵守 GPL 協議,避免閉源依賴。

  • 輕量化部署:通過靜態鏈接減少運行時依賴(無需安裝 VC++ Redistributable)。

  • 資源受限環境:無需安裝龐大的 Visual Studio,只需 MinGW 工具鏈。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73400.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73400.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle11.2.0.4 RAC 保姆級靜默安裝(二) DB數據庫軟件

1.響應文件配置 [rootdb11g1 software]# su - oracle [oracledb11g1 ~]$ cd /software/database/ [oracledb11g1 database]$ cd response/ [oracledb11g1 response]$ vi db_install.rsp oracle.install.optionINSTALL_DB_SWONLY ORACLE_HOSTNAMEdb11g1 UNIX_GROUP_NAME…

日語學習-日語知識點小記-構建基礎-JLPT-N4N5階段(22):給與和得到相關用法

日語學習-日語知識點小記-構建基礎-JLPT-N4&N5階段(22):給與和得到相關用法 1、前言(1)情況說明(2)工程師的信仰2、知識點(1) あげます :給(2)もらいます(いただきます) 得到。(3) くれました :主要是給我。3、單詞(1)日語單詞(2)日語片假名…

Qt5中視口(ViewPort)與窗口(Window)

在Qt中,setViewport和setWindow是用于控制坐標系映射的核心方法,二者共同決定了繪圖邏輯與物理設備之間的轉換關系。以下是關鍵點總結: ?1. 視口(Viewport)與窗口(Window)的核心區別? ?視口…

迪威 3D 模型發布系統:制造業產品展示革新利器

在競爭激烈的制造業領域,如何將產品全方位、直觀地呈現給客戶,成為企業脫穎而出的關鍵。傳統的產品展示方式往往受限于平面資料或有限的實物展示,難以讓客戶深入了解產品的復雜結構與精妙細節。迪威 3D 模型發布系統的問世,為制造…

EasyCVR安防視頻匯聚平臺助力工業園區構建“感、存、知、用”一體化智能監管體系

在現代工業園區的安全管理和高效運營中,視頻監控系統扮演著不可或缺的角色。然而,隨著園區規模的擴大和業務的復雜化,傳統的視頻監控系統面臨著諸多挑戰,如設備眾多難以統一管理、數據存儲分散、智能分析能力不足、信息利用率低下…

解決 Redis 后臺持久化失敗的問題:內存不足導致 fork 失敗

文章目錄 解決 Redis 后臺持久化失敗的問題:內存不足導致 fork 失敗問題背景與成因解決方案修改內核參數 vm.overcommit_memory增加系統內存或 Swap 空間調整 Redis 配置 stop-writes-on-bgsave-error 在 Docker 環境中的注意事項總結 解決 Redis 后臺持久化失敗的問…

反射、反射調用以及修改成員變量,成員方法,構造函數、反射的應用

DAY11.2 Java核心基礎 反射(第二彈) 第一彈請訪問鏈接: 反射(第一篇) getMethod(String name, Class… parameterTypes)getMethods()getDeclaredMethod(String name,Class… parameterTypes)getDeclaredMethods() …

【鴻蒙開發】Hi3861學習筆記- 外部中斷

00. 目錄 文章目錄 00. 目錄01. 概述02. EXTI相關API03. 硬件設計04. 軟件設計05. 實驗現象06. 附錄 01. 概述 我們在做按鍵控制實驗時,雖然能實現 IO 口輸入功能,但代碼是一直在檢測 IO 輸入口的變化,因此效率不高,特別是在一些…

使用 crontab 定時同步服務器文件到本地

https://www.dong-blog.fun/post/1987 1. 安裝 sshpass sshpass 是一個可以自動輸入密碼的工具。如果未安裝,運行以下命令安裝: ? 對于 Debian/Ubuntu 系統: apt update && apt install sshpass? 對于 CentOS/RHEL 系統&#xf…

反射機制的理解

一、getName 方法解析 代碼功能 public static String getName(String key) throws IOException {Properties properties new Properties();FileInputStream in new FileInputStream("D:\\路徑...\\application.properties");properties.load(in); // 加載配置文…

Visual studio + Qt 項目配置管理

Visual studio Qt 項目配置管理 1.本機順利安裝 vs 和 Qt 軟件 ? 并且設置好Qt 的環境變量比如 E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\bin E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\lib E:\Qt\Qt5.9.8\5.9.8\msvc2017_64\include //這里是你電腦上Qt的路徑,每臺電腦不一樣…

通過 Python 爬蟲提高股票選股勝率

此貼為Python爬蟲技術學習貼 在股票中,即便有了選股規則,從5000多只股票中篩選出符合規則的股票也是十分困難的,于是想通過爬蟲來實現自動化的快速選股。全文用GP代替股票 實現方案 1、指定兩套規則,第一套弱約束,第…

SpringCloud帶你走進微服務的世界

認識微服務 隨著互聯網行業的發展,對服務的要求也越來越高,服務架構也從單體架構逐漸演變為現在流行的微服務架構。這些架構之間有怎樣的差別呢? 單體架構 單體架構:將業務的所有功能集中在一個項目中開發,打成一個…

FastAPI復雜查詢終極指南:告別if-else的現代化過濾架構

title: FastAPI復雜查詢終極指南:告別if-else的現代化過濾架構 date: 2025/3/14 updated: 2025/3/14 author: cmdragon excerpt: 本文系統講解FastAPI中復雜查詢條件的構建方法,涵蓋參數驗證、動態過濾、安全防護等18個核心技術點。通過引入策略模式、聲明式編程等技術,徹…

Ubuntu 22.04使用pigz多線程快速解壓/壓縮文件

最近搞項目,資料太大,解壓時間太久,于是想辦法解決。 開貼記錄。 1.安裝pigz sudo apt install pigz 2.解壓資料 解壓命令為 tar --use-compress-programpigz -xvpf ***.tar.gz 將最后的部分***.tar.gz換成你自己的文件即可 例如 ti…

Amazon Quantum Ledger Database (QLDB):革新數據可信記錄的終極解決方案

在數字化浪潮中,企業數據的安全性與可信性成為核心挑戰。無論是金融交易的透明審計、供應鏈的全程追蹤,還是醫療記錄的真實性驗證,如何確保數據不可篡改且可追溯,已成為企業亟待解決的難題。Amazon Quantum Ledger Database (QLDB…

日本IT|AWS工作內容及未來性、以及轉職的所需資質和技能

AWSとは AWSはAmazon Web Services(アマゾンウェブサービス)の略稱です。 名稱から分かるとおり、ネットを通じた通販などを事業として行っているAmazon.com社がクラウドサービスとして運営しています。 本來であれば自分たちでインフラ環境を構築する…

Conda+jupyterlab

文章目錄 1、Conda1.1、基本介紹1.2、conda安裝1.3、conda常用命令1.3.1、基本命令1.3.2、環境管理 2、Jupyterlab2.1、基本介紹2.2、安裝使用 3、pycharm中使用conda 1、Conda 1.1、基本介紹 Conda 是一個開源的包管理和環境管理工具,適用于 Python 及其他編程語…

Vue 項目中 CDN 引入的利弊及解決方案

在Vue項目中,引入到工程中的所有js、css文件,編譯時都會被打包進vendor.js,瀏覽器在加載該文件之后才能開始顯示首屏。若是引入的庫眾多,那么vendor.js文件體積將會相當的大,影響首屏的體驗。通過調試發送時間主要消耗…

擁有一臺云服務器能做什么呢?

擁有一臺云服務器就像擁有了一臺24小時在線的遠程電腦,你可以通過互聯網隨時隨地管理它。它的用途非常廣泛,無論是個人學習、開發測試,還是企業級應用部署,都能發揮重要作用。以下是常見的應用場景,按需求分類整理&…