C++客戶端Qt開發——開發環境

一、QT開發環境

1.安裝三個部分

①C++編譯器(gcc,cl.exe……)

②QT SDK

SDK-->軟件開發工具包

比如,windows版本QT SDK里已經內置了C++的編譯器(內置編譯器是mingw,windows版本的gcc/g++)

③QT的集成開發環境(IDE)

  • 官方提供的QT Creator

最容易入門,最容易上手的方式,開箱即用,雖然QT Creator使用過程中存在不少bug(有些bug非常影響使用體驗,但整體來說用起來挺方便,比較適合初學者)

  • Visual Studio

功能更強,但是需要額外的配置更多,更容易出錯,有些公司開發商業QT的時候可能會使用VS,需要給VS安裝插件,并且需要把QT SDK使用VS的編譯器重新編譯(現在也方便一些,有預編譯好的版本)

  • Eclipse

Eclipse并非只是Java IDE,本身是一個IDE平臺,可以搭配不同的插件構成不同的IDE

2.QT SDK的下載和安裝

官網地址:Index of /archive/qt

最好選擇一個比較穩定的版本

安裝過程中選這個,QT SDK中內置的C++編譯器

安裝完成后配置環境(不是必須的)

找到安裝目錄,依次點擊

把這個環境添加到系統的環境變量中

①QT自帶的離線版本的官方文檔

②QT設計師,圖形化的設計界面的工具,通過拖拽空間的方式來快速生成界面,會經常搭配QTCreator來使用

③QT語言家,作用是對國際化進行支持,有的時候,寫的程序要和國際接軌,允許單獨創建一個語言配置文件,把界面上需要用到的各種文字都配置到文件中,并且在文件中提前把各種語言的翻譯都配置進去,實現一鍵切換語言的效果

④命令行終端

⑤QT Creator,QT的集成開發工具

3.QT Creator

①創建新項目

新建項目,應用程序如果使用QT寫一個GUI程序,就應該選擇Application

構建系統,通過QT寫的程序,涉及到一系列的“元編程”技術,通過代碼來生成代碼

QT框架會在編譯的時候,自動調用一系列的生成工具,基于自己寫的代碼,生成一系列的其他C++代碼,最終編譯的代碼,也是最后生成的這些代碼

qmake:是老牌的qt構建工具

cmake:并非是qt專屬,很多的開源項目都會使用cmake

Qbs:新一代的qt構建工具(用得少)

使用Qt Creator創建項目,會自動生成一些代碼出來,生成的代碼就包含一個類,此處就是要選擇這個自動生成的類的父類是誰,QT中內置的類都是以Q前綴開頭的

QMainWindows--完整的應用程序窗口

QWidget--表示一個控件(窗口上的一個具體元素:輸入框,按鈕,下拉框,單選按鈕復選按鈕等)

QDialog--表示一個對話框

自動變為widget名稱,其中form file非常關鍵

Qt中創建圖形化界面的程序有兩種方式:

  1. 直接通過C++代碼的方式創建界面
  2. 通過form file,以圖形化的方式來生成界面

此時,就可以使用Qt Designer或者直接使用Qt Creator來編輯這個ui文件,從而以圖形化的方式快速方便的生成圖形界面

選擇翻譯文件,暫時不關注,這部分和國際化相關

選擇一下基于哪個編譯器的Qt SDK來構建后續代碼

②項目自動生成的代碼

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

QApplication a(argc,argv);編寫一個Qt的圖形化界面程序,一定需要有QApplication對象

Mywidget w;Widget在創建項目的時候,填寫了生成的類名,創建一個控件對象

.show()方法讓空間顯示出來

.hide()方法讓空間隱藏

這些方法都是Widget的父類QWidget提供的

return a.exec();exec表示讓程序執行起來(與linux中的exec沒有任何關系,只是名字恰好一樣)

#ifndef MYWIDGET_H
#define MYWIDGET_H
// 表示保證頭文件只被包含一次,更推薦#pragma once#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE// 創建項目時選擇的父類,Qt SDK內置的,
// 要想使用這個類,就要包含這個頭文件,
// 在Qt中,使用的類的頭文件名稱一樣
class MyWidget : public QWidget 
{Q_OBJECT // 是Qt內置的宏,宏本質是文本替換// 展開后,會生成一大堆代碼,Qt中有一個非常核心的機制,“信號和槽”// 如果某個類想使用“信號和槽”,就需要引入這個宏public:MyWidget(QWidget *parent = nullptr); // Qt中引用了“對象樹”機制,對象給掛到對象樹上// 往樹上掛的時候就需要指定父節點(對象樹就是一個普通的N叉樹,不是二叉樹)~MyWidget();private:Ui::MyWidget *ui; // 和form file密切相關
};
#endif // MYWIDGET_H

#ifndef MYWIDGET_H

#define MYWIDGET_H

表示保證頭文件只被包含一次,更推薦#pragma once

class MyWidget : public QWidget 創建項目時選擇的父類,Qt SDK內置的,要想使用這個類,就要包含這個頭文件,在Qt中,使用的類的頭文件名稱一樣

Q_OBJECT 是Qt內置的宏,宏本質是文本替換,展開后,會生成一大堆代碼,Qt中有一個非常核心的機制,“信號和槽”,如果某個類想使用“信號和槽”,就需要引入這個宏

MyWidget(QWidget *parent = nullptr); Qt中引用了“對象樹”機制,對象給掛到對象樹上,往樹上掛的時候就需要指定父節點(對象樹就是一個普通的N叉樹,不是二叉樹)

Ui::MyWidget *ui; 和form file密切相關

#include "mywidget.h"
#include "ui_mywidget.h" //form file 被qmake生成的頭文件MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget)
{ui->setupUi(this);
}MyWidget::~MyWidget()
{delete ui;
}

#include "ui_mywidget.h"form file 被qmake生成的頭文件

ui(new Ui::MyWidget){ ui->setupUi(this); }form file 生成的界面和當前widget關聯起來

③form file文件 .ui

雙擊打開.ui文件,此時Qt Creator就會調用Qt Desiger,打開ui文件,圖形化的界面編輯器

左側就是Qt中內置的控件,拖拽左側的空間到程序窗口中,就可以創建出具體的界面了

右側黃色背景的事編輯屬性,每個控件都有很多屬性,會影響到控件具體行為

此時點擊編輯按鈕,就會看到.ui文件的具體內容

.proQt項目的工程文件,也是qmake工具構架時候的重要依據

QT += core gui要引入的Qt的模塊,后面學習到一些內容的時候可能會修改這里

SOURCES += \main.cpp \mywidget.cppHEADERS += \mywidget.hFORMS += \mywidget.ui

描述了當前項目中,參與構建的文件都有啥,編譯器要編譯哪些文件,這個地方不需要手動修改,Qt Creator會自動維護好

.pro 類似于linux中的Makefile

④ 中間文件

構建過程中會產生一些中間文件

右鍵點擊.pro文件,然后點擊在Explorer中顯示,返回上一級會發現有一個同級文件夾

在運行一次程序后,就會在項目目錄并列的地方,多出來一個“build-xxxxx”目錄,這個目錄里面就是該項目運行過程中,產生的一些臨時文件(下圖是因為創建的時候選了git)

編譯Qt程序,還是會用到Makefile,但是不需要手動寫,而是編譯器會自動生成

ui_mywidget.hwidget.ui xml生成的.h文件

Empty.exe這就是最終生成的可執行程序,如果直接運行和在Qt Creator中運行時效果相同

.pro文件配置項:

  • TARGET: 指定生成的可執行文件的名稱。
  • TEMPLATE: 指定項目的類型,例如應用程序(app)、庫(lib)等。
  • SOURCES: 指定源代碼文件的列表。
  • HEADERS: 指定頭文件的列表。
  • LIBS: 指定需要鏈接的庫。
  • QT: 指定項目所需的Qt模塊。
  • DEFINES: 定義預處理宏。
  • QMAKE_CXXFLAGS: 指定編譯器選項。
  • win32/unix/macx: 平臺特定的配置,用于針對不同的操作系統設置特定的編譯選項。

通過編輯.pro文件,開發者可以定制項目的構建過程,包括指定源文件、鏈接庫、定義宏、設置編譯選項等。在Qt項目中,.pro文件的靈活性和可定制性使得開發者能夠更好地管理項目的構建和依賴關系。

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

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

相關文章

Python編程中用函數還是用復雜的表達式

要不要使用復雜表達式 Perl語言的原作者Larry Wall曾經說過&#xff0c;偉大的程序員都有三個優點&#xff1a;懶惰、暴躁和自負。乍一看這三個詞語沒有一個是褒義詞&#xff0c;但在程序員的世界里&#xff0c;這三個詞有不同的意義。首先&#xff0c;懶惰會促使程序員去寫一…

智慧園區規劃建設解決方案PPT(40頁)

智慧園區規劃建設解決方案摘要 1. 園區定義與發展歷程 園區&#xff0c;亦稱開發區&#xff0c;是在特定產業和區域政策指導下形成的區域。它們通過提供基礎設施和生產空間&#xff0c;吸引投資&#xff0c;形成技術、資本密集區&#xff0c;推動經濟發展。園區發展經歷了四代…

Docker 部署 ShardingSphere-Proxy 數據庫中間件

文章目錄 Github官網文檔ShardingSphere-Proxymysql-connector-java 驅動下載conf 配置global.yamldatabase-sharding.yamldatabase-readwrite-splitting.yamldockerdocker-compose.yml Apache ShardingSphere 是一款分布式的數據庫生態系統&#xff0c; 可以將任意數據庫轉換為…

【qt】TCP客戶端信息的接受和發送

當有信息時的槽函數關聯 跟服務端收到信息一樣,當可以讀一行的時候,就從套接字讀一行. 發送信息也是和服務端如出一轍,通過write(). 運行結果:

java EnumSet 介紹

EnumSet 是 Java Collections Framework 中專門為枚舉類型設計的高效集合實現。與其他集合類相比,EnumSet 提供了許多優點,如高效性、類型安全和易用性。它只能包含單個枚舉類型的值,并且在內部使用位向量實現,因而在空間和時間上都非常高效。 EnumSet 的特點 高效性:Enu…

Spring MVC 中的文件上傳 和 文件下載

Spring MVC 中的文件上傳 和 文件下載 文章目錄 Spring MVC 中的文件上傳 和 文件下載1. Spring MVC 中的文件上傳2. Spring MVC 中的文件下載3. 總結&#xff1a;4. 最后&#xff1a; 1. Spring MVC 中的文件上傳 文件上傳是&#xff1a;瀏覽器端向服務器發送文件&#xff0c…

C 語言結構體

由于近期項目需求,需使用到大量的指針與結構體&#xff0c;為更好的完成項目&#xff0c;故對結構體與指針的內容進行回顧&#xff0c;同時撰寫本博客&#xff0c;方便后續查閱。 本博客涉及的結構體知識有&#xff1a; 1.0&#xff1a;結構體的創建和使用 2.0: typedef 關…

解鎖音樂密碼,人工智能創作動人歌詞

在音樂的神秘世界里&#xff0c;每一段旋律都像是一把等待開啟的密碼鎖&#xff0c;隱藏著無盡的情感與故事。而如今&#xff0c;人工智能正以其獨特的智慧和創造力&#xff0c;幫助我們解鎖這些音樂密碼&#xff0c;創作出動人的歌詞。 “妙筆生詞智能寫歌詞軟件&#xff08;…

Provider(1)- 什么是AudioBufferProvider

什么是AudioBufferProvider&#xff1f; 顧名思義&#xff0c;Audio音頻數據緩沖提供&#xff0c;就是提供音頻數據的緩沖類&#xff0c;而且這個AudioBufferProvider派生出許多子類&#xff0c;每個子類有不同的用途&#xff0c;至關重要&#xff1b;那它在Android哪個地方使…

訪問 Postman OAuth 2.0 授權的最佳實踐

OAuth 2.0 代表了 web 安全協議的發展&#xff0c;便于在多個平臺上進行授權服務&#xff0c;同時避免暴露用戶憑據。它提供了一種安全的方式&#xff0c;讓用戶可以授權應用程序訪問服務。 在 Postman 中開始使用 OAuth 2.0 Postman 是一個流行的API客戶端&#xff0c;支持 …

亞馬遜店鋪注冊

**步驟一&#xff1a;準備注冊相關資料** 在注冊之前&#xff0c;請準備以下資料&#xff1a; 1.公司營業執照照片&#xff08;清晰完整的拍照上傳&#xff09; 2.法人身份證正反面照片&#xff08;清晰完整的拍照上傳&#xff09; 3.雙幣付款信用卡&#xff08;VISA&#xff0…

[PaddlePaddle飛槳] PaddleSpeech-自動語音識別-小模型部署

PaddleSpeech的GitHub項目地址 環境要求&#xff1a; gcc > 4.8.5 paddlepaddle < 2.5.1 python > 3.8 OS support: Linux(recommend), Windows, Mac OSXpip下載指令&#xff1a; python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.c…

探索4D毫米波雷達和攝像頭在自動駕駛中的潛力

隨著自動駕駛技術的快速發展&#xff0c;關于各種傳感器的必要性&#xff0c;尤其是LiDAR&#xff08;激光雷達&#xff09;與毫米波雷達結合攝像頭的作用&#xff0c;激發了激烈的討論。在這篇博客中&#xff0c;我們將探討4D毫米波雷達和攝像頭的組合是否可能成為自動駕駛車輛…

將vue項目整合到springboot項目中并在阿里云上運行

第一步&#xff0c;使用springboot中的thymeleaf模板引擎 導入依賴 <!-- thymeleaf 模板 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency> 在r…

聊聊接入Arbitrum的正確姿勢

本文首發于公眾號&#xff1a;Keegan小鋼 前言 我們知道&#xff0c;目前最主流的 Ethereum Layer2 方案中&#xff0c;主要有 Optimistic Rollup 和 ZK Rollup 兩大類。而 Optimistic Rollup 的實現方案中&#xff0c;則是 Optimism 和 Arbitrum 最受關注。而我們最近接入了 …

Java套紅:指定位置合并文檔-NiceXWPFDocument

需求&#xff1a;做個公文系統&#xff0c;需要將正文文檔在某個節點點擊套紅按鈕&#xff0c;實現文檔套紅 試了很多方法&#xff0c;大多數網上能查到但是實際代碼不能找到關鍵方法&#xff0c;可能是跟包的版本有關系&#xff0c;下面記錄能用的這個。 一&#xff1a;添加依…

redis-cli 連接Redis

Redis-cli介紹 redis-cli 是原生 Redis 自帶的命令行工具&#xff0c;您可以在云主機或本地設備上通過 redis-cli 連接 Redis 數據庫&#xff0c;進行數據管理。 redis-cli 客戶端的使用方法&#xff0c;請參考官方文檔。 連接命令 redis-cli -h <redis_instance_address…

一個極簡的 Vue 示例

https://andi.cn/page/621516.html

【qt】客戶端連接到服務器

獲取到IP地址和端口號. 通過connectToHost() 來進行連接. 對于客戶端來講,只需要socket即可. 客戶端連接服務端只需要使用套接字(Socket)來進行通信。客戶端通過創建一個套接字來連接服務端&#xff0c;然后可以通過套接字發送和接收數據。套接字提供了一種簡單而靈活的方式來…

接口安全配置

問題點&#xff1a; 有員工在工位在某個接口下鏈接一個集線器&#xff0c;從而擴展上網接口&#xff0c;這種行為在某些公司是被禁止的&#xff0c;那么網絡管理員如何控制呢&#xff1f;可以配置接口安全來限制鏈接的數量&#xff0c;切被加入安全的mac地址不會老化&#xff…