Qt 通過控件按鈕實現hello world + 命名規范(7)

文章目錄

  • 使用編輯框來完成 hello world
    • 通過編輯圖形化界面方式
    • 通過純代碼方式
  • 通過按鈕的方式來創建 hello world
    • 通過編輯圖形化界面方式
    • 通過純代碼方式
  • 總結Qt Creator中的快捷鍵
  • 如何使用文檔
  • 命名規范

簡介:這篇文章著重點并不在于創建hello world程序,重點是放在控件按鈕(push Button)與 connect 的神級配合,這樣當我們去點擊界面上的按鈕控件時,就會執行按鈕所關聯的處理函數,此時界面就會發生變化。而這個媒介就是connect,同時補充一點Qt的使用知識和規范,這樣代碼寫的越輕松,越規范,越自信。邀請各位看官好友一起瀏覽

在這里插入圖片描述

使用編輯框來完成 hello world

這里主要是使用編輯框來完成hello world,可以使用單行編輯框QLineEdit和多行編輯框QTextEdit

通過編輯圖形化界面方式

跟之前的label控件操作并無區別,而編輯框實現hello world并不是這節的重點,通過按鈕控件實現hello world才是重點所在

在這里插入圖片描述

不過這里與label控件實現hello world方式不同的是,它輸出的內容是可以編輯的

在這里插入圖片描述

通過純代碼方式

這里純代碼方式去實現hello world的也是根據label控件依葫蘆畫瓢哈

// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QLineEdit>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLineEdit* LineEdit = new QLineEdit(this);LineEdit->setText("hello world");
}Widget::~Widget()
{delete ui;
}

通過按鈕的方式來創建 hello world

通過編輯圖形化界面方式

也通過推拽控件Push Button去創建hello world但是這里比之前的labelLine Edit控件有更加高級玩法,按鈕,那肯定是按下去會出現什么反應或者變化,因此這里就牽扯到Qt 中的信號槽機制,它的本質就是給按鈕的點擊操作關聯上一個處理函數,當用戶點擊的時候就會執行這個處理函數,隨之發生變化

在這里插入圖片描述

這里的特殊玩法就是點擊這個按鈕讓這個文本內容(hello world)切換成 This is my world但這里并不是只去編輯圖形化界面,它需要結合代碼共同去完成這個操作,未來的學習很大程度上也需要借助圖形化界面,先展示修改文件的代碼,再對其進行闡述

void handleClick();該函數就是該按鈕的點擊操作關聯上的一個處理函數,按鈕被點擊之后,就把按鈕中的文本進行切換

// Widget.h(只保留關鍵代碼)
#include <QWidget>
#include<QPushButton>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handleClick();
private:Ui::Widget *ui;
};
#endif // WIDGET_H
  1. 介紹connect;connect這個單詞它本身就具有聯系,連接的意思,在Linux的網絡編程中也存在一個函數叫做connect,這個函數是用來給 TCP socket建立連接的(在寫 TCP 客戶端的時候,需要先建立連接,然后才能讀寫數據)。而Qt 中的 connect 是 QObject 這個類提供的靜態函數,這個函數的作用就是連接信號與槽,不過它和 TCP 的建立連接操作沒有任何關系,只是同一種術語的不同意思
  2. 解釋connect的四個參數第一個參數(ui->pushButton)誰發出的信號第二個參數(&QPushButton::clicked)點擊按鈕的時候就會自動觸發這個信號,發出了一個啥信號第三個參數(this)誰來處理這個信號第四個參數(&Widget::handleClick)接收信號后,具體怎么處理
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton, &QPushButton::clicked, this, &Widget::handleClick);
}Widget::~Widget()
{delete ui;
}void Widget::handleClick()
{// 當按鈕被點擊之后,就把按鈕中的文本進行切換if(ui->pushButton->text() == QString("hello world")){ui->pushButton->setText("This is my world");}else{ui->pushButton->setText("hello world");}
}

這里要詳述ui->pushButton;就是去訪問 form file(file文件)中創建的控件。通過下方的圖片能看到:Qt 工具會自動幫我們生成一個類名(可以手動修改)為 pushButton(objectName) 的 QPushButton類,也就是在 Qt Designer中創建一個控件的時候,此時就會給這個控件去分配一個 objectName屬性,且這個屬性的值要求是在界面中得是唯一的(不能重復)。而qmake在預處理.ui文件的時候就會根據這里的 objectName生成對應的C++代碼,變量 pushButton 就成為 ui 屬性中的成員變量結合圖片更好理解哈

在這里插入圖片描述
在這里插入圖片描述

此時按鈕對象,是不需要咱們自己 new出來的, new 對象的操作已經是被 Qt 自動生成了,而且這個按鈕對象已經作為ui對象里的一個成員變量了(直接繼承就OK,也無需作為Widget 的成員)

通過純代碼方式

對于純代碼版本,按鈕對象是咱們自己 new的,為了保證其他函數中能夠訪問到這個變量,就需要把按鈕對象設定為 Widget 類的成員變量

// Widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QPushButton>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();// 點擊按鈕后要進行的切換操作void handleClick();private:Ui::Widget *ui;// 得有一個QPushButton成員變量QPushButton* myButton;};
#endif // WIDGET_H
// Widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 老樣子,創建對象,在connectmyButton = new QPushButton(this);myButton->setText("hello world");connect(myButton, &QPushButton::clicked, this, &Widget::handleClick);
}Widget::~Widget()
{delete ui;
}void Widget::handleClick()
{if (myButton->text() == QString("hello world")){myButton->setText("This is my world");}else{myButton->setText("hello world");}
}

那實際開發中,是通過代碼的方式構造界面為主,還是通過圖形化界面的方式構造界面為主?首先這兩種都很主要,難分主次!如果你當前程序界面,界面內容是比較固定的,此時就會以圖形化的方式來構造界面。但是如果你的程序界面,經常要動態變化,此時就以代碼的方式來構造界面。這兩種方式,哪種方便就用哪種,而且這兩種方式也可以配合使用,在后面的學習中,這兩種方式會穿插使用

總結Qt Creator中的快捷鍵

  • 注釋:ctrl + /
  • 運行:ctrl + R
  • 編譯:ctrl + B
  • 字體縮放:ctrl + 鼠標滑輪
  • 查找:ctrl + F
  • 整行移動:ctrl + shift + ↑/↓
  • 自動對齊:ctrl + i
  • 查找某個函數文檔:鼠標對準F1
  • 同名.h.cpp切換:F4
  • 生成函數聲明的定義:alt + enter

如何使用文檔

  1. 直接將光標放到要查詢的類名/方法名上,直接按F1
  2. 點擊Qt Creator左側邊欄中的 “幫助” 按鈕
  3. 直接在搜索欄中搜索 Assistant

注意在未來的實際開發中,一定會用到很多的第三庫和框架的。那很可能用到的庫/框架,比較小眾,這時網上就很難去找到我們所需要的相關資料,那就只能去參考官方文檔,而官方文檔大概率是英文的,因為如果它的程序要走向國際化,它肯定是有一份英譯的參考資料,所以得去習慣去讀英文文檔

命名規范

去給變量/函數/文件/類 取名字,是非常有講究的,首先起的名字要有描述性,不要使用a/b/c/d這種無規律的名字去描述變量,其次如果名字比較長的話,由多個單詞構成,就需要使用適當的方式來進行區分不同的單詞,因此總共有兩種典型的命名風格蛇形命名法駝峰命名法

  1. 蛇形命名法偏好使用_來進行單詞的分割,主要用于C/C++/Python。比如:unordered_map,priority_queue
  2. 駝峰命名法偏好使用大寫字母進行單詞的分割,主要用于Java/JS/Go。比如:QApplication,QWidget
  3. 兩種命名方法都可以去使用,但咱講究的是入鄉隨俗,進入公司后,公司的項目使用的是哪種命名風格就用哪種方法

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

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

相關文章

實時網絡流量監控與防御:Python實現DDoS攻擊檢測

1. 需求分析 DDoS攻擊通過海量請求耗盡服務器資源。本文使用 Python Scapy 實時監控流量&#xff0c;自動觸發IP封禁。 2. 核心代碼實現 2.1 依賴安裝 pip install scapy psutil2.2 流量監控腳本&#xff08;ddos_detector.py&#xff09; import time from scapy.all im…

電賽經驗分享——模塊篇

1、前言 打算在這一個專欄中&#xff0c;分享一些本科控制題電賽期間的經驗&#xff0c;和大家共同探討&#xff0c;也希望能幫助剛剛參加電賽的同學&#xff0c;了解一些基本的知識。一些見解和看法可能不同或有錯誤&#xff0c;歡迎批評指正。 在本文中&#xff0c;主要介紹筆…

【LLM】Open WebUI 使用指南:詳細圖文教程

Open WebUI 是一個開源的、可擴展且用戶友好的自托管 AI 平臺,專為生成式人工智能模型交互而設計。 Open WebUI 旨在為用戶提供一個簡單易用、功能強大且高度定制化的界面,使其能夠輕松與各種 AI 模型(如文本生成、圖像生成、語音識別等)進行交互。 一、安裝與初始化配置 擴…

HarmonyOS Next~HarmonyOS應用測試全流程解析:從一級類目上架到二級類目專項測試

HarmonyOS Next&#xff5e;HarmonyOS應用測試全流程解析&#xff1a;從一級類目上架到二級類目專項測試 引言&#xff1a;HarmonyOS生態下的質量保障挑戰 在萬物互聯的智能時代&#xff0c;HarmonyOS作為分布式操作系統&#xff0c;為開發者帶來了前所未有的創新空間&#x…

一種機載掃描雷達實時超分辨成像方法——論文閱讀

一種機載掃描雷達實時超分辨成像方法 1. 專利的研究目標與產業意義1.1 研究目標與實際問題1.2 產業意義2. 專利的創新方法:滑窗遞歸優化與實時更新2.1 核心模型與公式2.2 與傳統方法對比優勢3. 實驗設計與驗證3.1 仿真參數3.2 實驗結果4. 未來研究方向與挑戰4.1 學術挑戰4.2 技…

滾筒洗衣機拆解學習

本文圖片來自于B站視頻&#xff0c;鏈接在文末&#xff0c;不涉及任何公司及實驗室產品 對小米滾筒洗衣機進行拆解&#xff0c;并收集了用戶對這款產品的評價&#xff0c;認識了關鍵部件。下一步重點學習對各個電機的控制邏輯和供電系統。 整機拆解學習&#xff1a; 功能面板…

【金倉數據庫征文】金倉數據庫 KingbaseES 在電商平臺數據庫遷移與運維中深入復現剖析

【金倉數據庫征文】金倉數據庫 KingbaseES 在電商平臺數據庫遷移與運維中深入復現剖析 前言 在當今數字化商業蓬勃發展的時代&#xff0c;電商平臺的數據量呈爆發式增長&#xff0c;對數據庫性能、穩定性和擴展性提出了極高要求。本文章基于大型電商平臺原本采用 MySQL 數據庫&…

iPhone手機連接WiFi異常解決方法

iPhone手機連接WiFi異常解決方法 一、問題現象二、iPhone連不上可能的原因三、基礎排查與快速修復第一步:重啟大法第二步:忽略網絡,重新認證第三步:關閉“私有無線局域網地址”第四步:修改DNS服務器第五步:還原網絡設置四、路由器端排查及設置關閉MAC地址過濾或添加到白名…

Android NDK版本迭代與FFmpeg交叉編譯完全指南

在Android開發中&#xff0c;使用NDK(Native Development Kit)進行原生代碼開發是一項常見需求&#xff0c;特別是當我們需要集成FFmpeg這樣的多媒體處理庫時。本文將深入分析Android NDK的版本迭代分界線&#xff0c;詳細講解FFmpeg交叉編譯的注意事項&#xff0c;并提供完整的…

typecho中的Widget設計文檔

組成系統的最基本元素 什么是Widget Widget是組成Typecho的最基本元素&#xff0c;除了已經抽象出來的類庫外&#xff0c;其它幾乎所有的功能都會通過Widget來完成。在實踐中我們發現&#xff0c;在博客這種小型但很靈活的系統中實施一些大型框架的思想是不合適的&#xff0c…

Python序列Day3

序列 序列是一種數據存儲方式&#xff0c;用方括號標注&#xff0c;逗號分隔的一組值。在內存中&#xff0c;序列就是一塊用來存放多個值的連續的內存空間。 常見序列結構有&#xff1a;字符串、列表、元組、字典、集合 列表 用于存儲任意數目&#xff0c;任意類型的數據集…

私服與外掛:刑事法律風險的深度剖析

首席數據官高鵬律師團隊編著 在當今數字化時代&#xff0c;網絡游戲產業蓬勃發展&#xff0c;然而與之相伴的私服與外掛現象卻屢禁不止&#xff0c;且其背后隱藏著嚴重的刑事法律風險。作為一名律師&#xff0c;有必要在此對私服與外掛相關的刑事問題進行深入解讀&#xff0c;以…

Linux云計算訓練營筆記day04(Rocky Linux中的命令)

mv 移動(剪切) 源數據會消失 格式: mv 源文件 目標路徑 touch /opt/a.txt 創建文件 mv /opt/a.txt /root 移動文件&#xff0c;沒有改名 mkdir gongli 創建目錄 mv gongli /opt/ 移動目錄&#xff0c;沒有改名 mv /opt/gongli tedu 移動目錄&#xff0c;改名了 …

藍橋杯青少 圖形化編程——“星星”點燈

藍橋杯青少 圖形化編程——“星星”點燈 編程實現&#xff1a; 有10盞燈&#xff0c;從1到10按順序依次編號&#xff0c;初始時全部燈處于開啟狀態。有10個人也從1到10依次編號。第一個人&#xff08;1號&#xff09;將燈全部關閉&#xff0c;第二個人&#xff08;2號&#x…

conda配置好的pytorch在jupyter中如何配置

配置 其實不用再配置了 如下圖&#xff08;主要是激活pytorch環境&#xff0c;再jupyter notebook&#xff09; jupyter運行快捷鍵shiftenter 新建文件夾folder&#xff0c;新建notebook 使用 幫助文檔&#xff08;兩種方式&#xff09; ctrl/ 注釋

COLT_CMDB_aix_diskinfo.sh

#!/bin/ksh #IT_BEGIN #IT_TYPE3 #IT SYSTEM_AIX_AGENTDISKDISCOVER|discovery.diskInfo[disc] #原型指標 #IT_RULE SYSTEM_AIX_IP|ipAddress[{#DISKNAME}] #IT_RULE SYSTEM_AIX_AGENTDISKPATH|diskPath[{#DISKNAME}] #IT_RULE SYSTEM_AIX_DISKNAME|diskName[{#DISKNAME}] #IT_…

IBM BAW(原BPM升級版)使用教程第五講

結前篇&#xff01; 一、服務&#xff1a;外部服務 在 IBM Business Automation Workflow (BAW) 中&#xff0c;外部服務&#xff08;External Services&#xff09;是指在流程中調用和集成外部系統或服務的組件。外部服務允許IBM BAW與其他業務系統、應用程序或第三方服務進行…

如何用更少的顯存訓練 PyTorch 模型

文章目錄 1、引言 2、自動混合精度訓練 3、低精度訓練 4、梯度檢查點 5、通過梯度累積減小批量大小 6、張量分片與分布式訓練 7、高效數據加載 8、使用 In-Place 操作 9、Activation and Parameter Offloading 10、使用更精簡的優化器 11、高級策略 12、總結 1、引言 在訓練大…

極速輕量,Rust 網絡開發新選擇:Hyperlane 框架深度解析

極速輕量&#xff0c;Rust 網絡開發新選擇&#xff1a;Hyperlane 框架深度解析 在高性能網絡服務開發領域&#xff0c;Rust 憑借其內存安全與高效并發的特性備受青睞。今天&#xff0c;我們迎來一款專為現代 Web 服務打造的明星框架——Hyperlane&#xff0c;它以“輕量高效、…

單片機裸機環境下臨界區保護

目錄 1、直接中斷屏蔽法 2、嵌套計數優化法 3、BASEPRI寄存器應用 4、動態優先級調整策略 5、LDREX/STREX指令應用 6、位帶別名區原子訪問 7、上下文感知保護 8、中斷延遲優化技術 在嵌入式系統開發中&#xff0c;臨界區保護是確保系統可靠性的關鍵技術。本文以ARM Cor…