QT(概述、基礎函數、界面類、信號和槽)

一、概述

1、QT

QT是一個c++的第三方庫,是專門用來進行界面編程的一個庫
1. QT本身實現了多種軟件:
2. ubuntu系統中所有界面都是QT做的
3. 最新版本的QQ也是QT做的
4. 嵌入式編程中,幾乎所有的上位機,都可以使用QT來做
QT本身除了實現了ui界面編程之外,還實現了很多非ui界面編程的功能????????
網絡通信、藍牙通信、串口通信、web瀏覽器顯示等等等等
基本上來說,現實生活當中可能需要用到的功能,都能用QT來實現

1、QT的手冊怎么查詢
在左側功能欄,點到幫助,將目錄改成索引,可以通過搜索欄查找要查找的類

最上面一欄是內容欄,列出了這個類中所包含哪些東西(單擊綠色的文字可以跳轉到目標)

第二個是類的屬性欄,列出了類的基類,頭文件等等

2、關于QT的頭文件

QT的所有頭文件,都會以 Q 開頭,后面的所有單體,以駝峰命名法,命名

#include <QDebug>
#include <QApplication>
#include <QLabel>
#include <QWidget>
#include <QLineEdit>
#include <QTextEdit>
#include <QPalette>
#include <QPushButton>

3、關于編譯執行后的輸出方式

在編輯這一欄,中可以看見項目工程文件,工程文件中有一個和工程文件同名的.pro文件,該文件中的是工程文件的編譯和查找方式(就像Makefile)。

在屏幕下方的提示欄輸出:

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \main.cpp \HEADERS += \FORMS += \qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

重新彈出終端文本框輸出(自帶的):

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qtSOURCES += main.cpp

二、QT的一些基礎的函數

1、qDebug(用來debug)

格式:#include <QDebug>qDebug() << 要輸出的目標;
功能:該函數返回一個QT的標準輸出流對象
解析:QDebug類型對象,直接將該類型對象理解成 cout 就行了

三、QT界面類

1、QWidget(窗口類)

#include <QWidget>
構造函數:QWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
QWidget是一個窗口類
注意:QWidget創建的對象只有一個窗口,不能輸入,不能顯示文字,一般用于輔助布局QWidget這個窗口類的作用就是用來實現大界面的框架,底盤,用來承載其他各種各樣的子界面

2、QLabel(文本框)

#include <QLabel>
構造函數:QLabel(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())QLabel(const QString &text, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
功能:這是一個文本框,只能顯示編譯的文本,不能通過文本框輸入文本
成員方法:1.setText(設置文本內容)2.clear(清空文字)······

3、QLineEdit(行編輯文本框)

#include <QLineEdit>
構造函數:QLineEdit(QWidget *parent = Q_NULLPTR)QLineEdit(const QString &contents, QWidget *parent = Q_NULLPTR)
功能:這是一個行編輯器,可以進行一行的文本編輯
成員方法:1.setText(設置文本內容)2.setPlaceholderText(設置提示文字)3.setEchoMode(設置顯示方式)4.setPalette(QPalette pe);(設置成調色板配置的顏色)······

4、QTextEdit(文本編輯文本框)

#include <QTextEdit>
構造函數:QTextEdit(QWidget *parent = Q_NULLPTR)QTextEdit(const QString &text, QWidget *parent = Q_NULLPTR)
成員方法:1.setText(設置文本內容)2.append(換行并追加文字)3.setPlaceholderText(設置提示文字)4.setEchoMode(設置顯示方式)5.setPalette(QPalette pe);(設置成調色板配置的顏色)······

5、QPalette(調色板)

#include <QPalette>
構造函數:(還有的其他的構造函數可以自己查找)QPalette()QPalette(const QColor &button)
成員方法:1.setColor(設置調色板的顏色)······

6、對象樹

對象樹是QT的核心機制之一
QT中絕大多數的類都繼承自一個基類QObject,繼承自同一個基類的好處是方便多態
QObject有一個重要的分支派生類:QWidget,結構圖如下

7、父子對象,父子組件

1)父子組件的關系

在對象樹中,在此繼承關系下,所有的刺激組件都可以將他的上一級或同級的對象,設為父組件

多個子窗口設置同一個窗口為父組件,組成父子組件后,有以下優點:

父子組件是一個整體,子組件是父組件的一部分,父組件的顯示、關閉、移動操作,子組件也會同步執行。
由于子組件是父組件的一部分,所以子組件的生命周期由父組件自動管理,當父組件析構時,父組件也會自動調用子組件的析構函數。

2)如何設置父子組件

Qobject的所有派生類中都有一個默認參叫做parent,就比如下圖的這些構造函數,在構造對象時傳入具體的窗口對象,就可以將其設置為自己的父組件。

如下圖,就可以將qw設置為ql的父組件。

8、QBoxLayout(布局類)

布局類有兩個派生類:

分別是:QHBoxLayout(水平派生類)和 QVBoxLayout(垂直派生類)

1)QHBoxLayout(水平派生類)

#include <QHBoxLayout>
構造函數:QHBoxLayout(QWidget *parent)
成員函數:addWidget(添加組件到布局中)

2)QVBoxLayout(垂直派生類)

#include <QVBoxLayout>
構造函數:QVBoxLayout(QWidget *parent)
成員函數:addWidget(添加組件到布局中)

3)setLayout(設置窗口的布局)

#include <QWidget>
void QWidget::setLayout(QLayout *layout)

練習:發送消息界面

四、信號和槽

1、信號

當一個組件發生人為操作 、狀態發生改變的時候,就會發出一個對應的信號,用來通知外部,當前組件發生了什么

為什么要通知外部當前組件發生了什么:被通知的外部,一旦捕獲到信號,就可以做出對應的處理

例如:

點擊按鈕 >> 按鈕發出clicked信號 >> 外部捕獲clicked信號 >> 做出對應操作(如發送消息,關閉窗口等操作)

QT中的信號可以攜帶參數:

目的在于:通知外部當前組件發生了什么操作的時候,還可以通過參數的形式,將一些必要的數據發送給外部

2、槽

用來處理信號的一個函數

當外部 或者 特定組件,捕獲到信號之后,就會調用對應的槽函數,來處理該信號

點擊按鈕 >> 按鈕發出clicked信號 >> 外部捕獲clicked信號 >> 做出對應操作,這里對應的操作,其實就是槽函本身

由槽函數來實現對應的操作

QT中的槽函數由2個特點:

槽函數允許用戶直接手動調用,這個時候,槽函數的參數,直接由用戶手動傳入即可
槽函數同時允許通過信號函數觸發,這個時候,槽函數的參數來自于信號的參數,即信號發出的同時,通過參數發出了一組數據,該數據由對應的槽函數的參數接受

3、connect(關聯信號和槽)

QObject::connect(發出信號的組件的地址,信號函數指針,接受信號的組件地址,槽函數指針)
功能:將指定的信號和指定的槽關聯,當發出信號后,就執行槽函數
參數:發出信號的組件的地址:組件地址信號函數指針:&信號所屬的類名::信號函數名接受信號的組件地址槽函數指針: &槽函數所屬的類名::槽函數名

4、信號和槽的可關聯性

就是信號和槽之間的關聯需要滿足一個的條件:

如果槽函數有一個形參,那么與之關聯的信號就必須在相同位置傳遞一個實參;
如果信號有一個實參要傳遞,但是槽函數沒有形參接收則沒關系。

5、自定義信號和槽

1)自定義槽函數

我們可以給自定義的窗口寫自定義槽函數

自定義槽函數可以寫在 public 中,也可以寫在 public slots?中,寫在 public slots 中更規范

2)自定義信號

必須寫在訪問限制符 signals 下
自定義信號只需要聲明不需要定義

3)如何觸發自定義信號

調用信號函數:emit 信號函數名();
注意,如果使用了自定義信號,需要滿足以下3個要求1.使用自定義信號的類,必須直接或者間接的繼承自 QObject,也就是這個類必須是對象樹中的成員之一2.必須在使用了自定義信號的類的一開頭,寫上一個關鍵    Q_OBJECT3.使用自定義信號的類,必須分文件寫法,不能和 main 在同一個文件中

6、connect的多種使用方式

1)關聯某個對象的信號和槽

QObject::connect(btn,&QPushButton::clicked,this,&Widget::myslot);

2)將某個對象的信號與lambda

QObject::connect(ui->pushButton,&QPushButton::clicked,[=](){QString str = ui->lineEdit->text();ui->textEdit->append(str);ui->lineEdit->clear();
});一般說,這是我們最經常使用的方法
因為 lambda表達式能夠捕獲父作用域中所有內容:包括ui以及其他的私有成員
非常好用

3)將某個對象的信號與關聯函數關聯

void func(){qDebug() << "hello world";
}QObject::connect(ui->pushButton,&QPushButton::clicked,func);
一般來說,我們很少讓一個信號關聯到全局函數
因為全局函數無法訪問ui

4)將對象的信號關聯到另一個信號

QObject::connect(ui->pushButton_2,&QPushButton::clicked,ui->pushButton,&QPushButton::clicked);
由一個信號觸發另一個信號
這個也很好用,但是目前來說用不上

7、轉到槽功能

轉到槽功能,會自動生產一個與目標組件,所選擇的信號關聯好的槽函數。
轉到槽有局限性:只有ui界面里面的組件能夠使用轉到槽,ui界面中不能顯示的窗口無法使用轉到槽。

1. 雙擊 .ui 文件

2. 繪制界面

3. 轉到槽(在Widget文件中添加槽函數)

4. 添加的槽函數

練習:發送消息

基于發送消息界面的練習,制作發送消息的顯示,點擊 "發送" 按鈕之后,將le中的文字,同步到te上去,
并且刪除le中的文字點擊 "發送" 按鈕后,觸發按鈕的 clicked 信號
1:獲取并記錄lineEdit的文字
2:將記錄的文字設置到textEdit上面去
3:清空lineEdit上的文字

1)Widget類文件

2)main函數文件

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

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

相關文章

【從零開始java學習|第六篇】運算符的使用與注意事項

目錄 一、算術運算符 1. 基本算術運算符&#xff08;二元&#xff09; 2. 自增 / 自減運算符&#xff08;一元&#xff09; 二、類型轉換&#xff08;隱式與強制&#xff09; 1. 隱式轉換&#xff08;自動類型轉換&#xff09; ?編輯 2. 強制轉換&#xff08;顯式類型轉…

shellgpt

一、介紹 官網&#xff1a;https://github.com/TheR1D/shell_gpt ShellGPT&#xff08;shell_gpt&#xff09; 是一款把 GPT 系列大模型能力直接搬到終端 的開源命令行生產力工具。用日常英語或中文描述需求&#xff0c;就能幫你 生成、解釋甚至自動執行 Shell 命令&#xff…

geoserver sql視圖調用Postgis自定義函數問題記錄

一、問題描述&#xff1a;geoserver sql視圖調用Postgis自定義函數對點圖層增加一條記錄時&#xff0c;返回結果主鍵自增ID加了2&#xff0c;但表中數據只增加一條記錄。 但在pgAdmin中直接寫SQL調用Postgis自定義函數對點圖層增加一條記錄時&#xff0c;返回結果主鍵自增ID只加…

#T1224. 最大子矩陣

題目傳送 題目描述 已知矩陣的大小定義為矩陣中所有元素的和。給定一個矩陣&#xff0c;你的任務是找到最大的非空(大小至少是11)子矩陣。 比如&#xff0c;如下44的矩陣 0 -2 -7 09 2 -6 2 -4 1 -4 1-1 8 0 -2的最大子矩陣是 9 2-4 1-1 8這…

2025年大模型安全崗的面試匯總(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 1. Transformer核心機制及其對LLM突破的基石作用 2. LLM能力邊界評估框架設計 3. 模型層級安全風險分析 …

《關于省級政務云服務費支出預算標準的規定》豫財預〔2024〕106號解讀

《關于省級政務云服務費支出預算標準的規定》豫財預〔2024〕106號文件由河南省財政廳編制經省政府同意后于2024年12月3日印發執行&#xff0c;規定作為省級政務云服務費支出預算編制和審核的依據&#xff0c;旨在加強省級部門預算管理&#xff0c;規范政務云服務費支出預算編制…

使用HalconDotNet實現異步多相機采集與實時處理

文章目錄 一、核心功能與原理 功能目標: 工作原理: 關鍵機制: 二、完整C#實現代碼 三、關鍵實現解析 1. 零拷貝圖像傳輸 2. 動態幀率控制 3. HALCON并行優化 4. 異常隔離機制 四、高級優化策略 1. 硬件加速配置 2. 內存池管理 3. 實時性保障 一、核心功能與原理 功能目標:…

《瘋狂Java講義(第3版)》學習筆記ch4

ch4流程控制與數組1.switch語句后的expression表達式的數據類型只能是byte、short、char、int四種證書類型。2.建議不要在循環體內修改循環變量&#xff08;也叫循環計數器&#xff09;的值&#xff0c;否則會增加程序出錯的可能性。3.定義數組推薦語法格式&#xff1a;type[] …

COLMAP進行密集重建,三維重建的步驟

密集重建是在稀疏重建的基礎上進行的 稀疏重建見&#xff1a;用 COLMAP GUI 在 Windows 下一步步完成 相機位姿估計&#xff08;SfM&#xff09; 和 稀疏點云重建的詳細步驟&#xff1a;_colmap database導入圖片位姿-CSDN博客 完成稀疏重建后直接進入以下步驟進行密集重建&am…

基于飛算JavaAI實現Reactor模式服務器的深度實踐

一、飛算JavaAI技術概述 1.1 飛算JavaAI平臺簡介飛算JavaAI是飛算科技推出的智能化Java開發平臺&#xff0c;通過AI技術賦能傳統軟件開發流程&#xff0c;為開發者提供從需求分析到代碼實現的全流程智能化解決方案。該平臺深度融合了人工智能技術與軟件開發實踐&#xff0c;具備…

量子人工智能

量子人工智能&#xff08;QAI&#xff09;是量子計算與人工智能的強大融合。這一領域旨在將量子系統獨特的計算能力與人工智能的模式識別和學習能力相結合&#xff0c;以更快、更高效地解決問題。 量子人工智能與常規人工智能的區別是什么&#xff1f;常規人工智能在經典計算機…

算法題Day1

1. 練習1&#xff1a;Hello,World!解題步驟:using namespace std; int main() {cout<<"Hello,World!"<<endl;return 0; }2. 練習2&#xff1a;打印飛機解題步驟:#include <iostream> using namespace std; int main() {cout << " …

Cypher注入詳解:原理、類型與測試方法

Cypher&#xff0c;全稱為 (Open) Cypher Query Language&#xff0c;是一種專為圖數據庫設計的聲明式查詢語言。它以直觀的模式匹配方式&#xff0c;幫助開發者和數據分析師從復雜的圖結構數據中檢索、創建和修改信息。如果說 SQL 是關系型數據庫的語言&#xff0c;那么 Cyphe…

PG靶機 - Pelican

一、 初步偵察與服務探測 1.1 端口掃描與服務識別 首先&#xff0c;對目標主機 192.168.163.98 進行全面的端口掃描&#xff0c;以識別所有開放的服務。 sudo nmap 192.168.163.98 -p- --min-rate5000 -A圖 1: Nmap 掃描結果&#xff0c;顯示多個開放端口 掃描結果表明&#xf…

【1】Transformers快速入門:自然語言處理(NLP)是啥?

第一章&#xff1a;自然語言處理&#xff08;NLP&#xff09;是啥&#xff1f;一句話解釋&#xff1a; NLP 教電腦聽懂人話、說人話的技術 &#xff08;比如讓手機聽懂你說話、讓翻譯軟件變聰明&#xff09;NLP發展史&#xff1a;電腦學人話的 “翻車史” 第一階段&#xff08…

微軟發布五大AI Agent設計模式 推動企業自動化革新

今日&#xff0c;微軟在官網正式公布了企業級AI智能體&#xff08;Agent&#xff09;的五大核心設計模式&#xff0c;旨在通過模塊化架構與自適應能力&#xff0c;幫助企業構建具備推理、協作與自主進化能力的"數字員工團隊"。這一技術框架突破傳統RPA&#xff08;機…

如何根據本地是有GPU安裝對應CUDA版本的PyTorch

要在本地安裝與您的NVIDIA GPU匹配的CUDA版本PyTorch&#xff0c;請按以下步驟操作&#xff1a; 步驟1&#xff1a;確定GPU型號和驅動信息 1.按 Win X選擇 ?設備管理器?2.展開 ?顯示適配器? → 記錄您的NVIDIA顯卡型號&#xff08;如RTX 3060&#xff09;3.打開命令提示…

在FP32輸入上計算前向傳播需要多長時間?FP16模型的實例與之前的模型相比,它快了多少?

下面的 MixedModel 類使用作為參數提供的數據類型創建了一個非常簡單的兩層模型: class MixedModel(nn.Module): def init (self, dtype): super(). init

嵌入式硬件中MOS管圖形詳解

第一:MOS管電子元器件分析 MOS管全稱叫金屬氧化物半導體場效應晶體管,是一種壓控器件。 MOS管屬于場效應晶體管。 1、進入飽和區,若想加大電流該怎么做? 答:增加柵極電壓,以擴大溝道寬度,此時到溝道再次被夾斷所通過的電流也會增大。 2、MOS管的特性 答:(1)MOS管…

介紹java中atomic及相關類

文章目錄一、Atomic 類的核心原理二、常見 Atomic 類及用法1. 基本類型原子類&#xff08;1&#xff09;AtomicInteger&#xff08;原子更新 int&#xff09;&#xff08;2&#xff09;AtomicLong&#xff08;原子更新 long&#xff09;&#xff08;3&#xff09;AtomicBoolean…