線性容器(QByteArray、QString、QList模板類)、堆棧窗體

QT 線性容器

點擊查看:字符和字節的區別,ASCII、Unicode 和 UTF-8 編碼的區別。(👈 安全鏈接,放心跳轉)
在這里插入圖片描述

QByteArray

思考:char buf[6] = “hello”;
如果 C 語言中要利用 buf 內容重新生成 “hello world” 字符串,該怎樣做?

char dest[16] = {0};// 方法一
strcat(dest, buf);
strcat(dest, " world");// 方法二
sprintf(dest, "%s world", buf);

Qt 通過 QByteArray 為我們提供了一個可變長的字節數組容器。主要用來存儲原始的字節流
QByteArray 仍可以表示字符串,類似于 unsigned char buf[],但是 Qt 中多用 QString 來表示字符串。
QByteArray 一般結合其它類使用,比如 QIODevice 類的 QByteArray QIODevice::readAll()。

QByteArray(const char *data, int size = -1);  		// 構造函數
char	at(int i) const; 							// 返回第i個元素
void	clear();  									// 清空
bool	contains(const char * str) const;  			// 是否包含字符串  <==> strstr
bool	contains(char ch) const; 					// 是否包含字符
char 	*data();  									// 從 QByteArray 類型轉化為 char *int	indexOf(const char *str, int from = 0);		// 查找 從 from 開始第一次匹配 str 的位置
QByteArray & append(char ch);  					// 尾部增加
QByteArray & prepend(char ch); 					// 頭部增加
int	length() const;  							// 返回長度
QByteArray &remove(int pos, int len);  			// 刪除

💡

QByteArray 定義一個字符串 “my”,使用 qDebug 輸出每個字符。
在其前增加 "Welcome to ",其后增加 " world. ",驗證新字符串中是否包含 “we” 字符串。
刪除從 “world” 字符串后的所有字符。

// main.cpp#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QByteArray arr("my");arr.prepend("Welcome to ");arr.append(" world. ");qDebug() << arr;for (int i = 0; i < arr.length() / 5; i++)		// 字符太多,顯示前幾個qDebug("0x%x", arr.at(i));qDebug() << arr.contains("we");qDebug() << arr.contains("We");					// 大小寫敏感arr.remove(arr.indexOf("world")+5, arr.length());// 若要刪除 含 "world" 在內的、其后所有字符,去掉 +5// 第二個參數寫長些,可以多于字符串中剩余字符的個數,不會報錯qDebug() << arr;return 0;
}

在這里插入圖片描述

QString

QString 類提供了一個 Unicode 文本和經典的 C語言 以 ‘\0’ 結尾的字符數組的抽象。

數字轉字符串

QString	number(long n, int base = 10) [static];
QString	number(double n, char format = 'g', int precision = 6) [static];

e.g.
long a = 63;
QString s = QString::number(a, 10); // s == “63”
QString t = QString::number(a, 16).toUpper(); // t == “3F”
QByteArray 同理。

字符串轉數字

short	 toShort(bool * ok = 0, int base = 10) const;
float	 toFloat(bool * ok = 0) const;
long	 toLong(bool * ok = 0, int base = 10) const;
// 也可以 toInt

e.g.
QString str1 = “1234.56”;
float a = str1.toFloat(); // a == 1234.56
QByteArray 同理。

QString 轉 QByteArray

QByteArray toLocal8Bit() const;
QByteArray toUtf8() const;

QByteArray 轉 char *

char 	*data();

QString 通過 QByteArray 間接轉 char *

QString 沒有直接轉換為 char * 的方法,需要中間經過一層 QByteArray 的過渡。

char 	*dest = src.toLocal8Bit().data();
char    *dest = src.toUtf8().data();

QList 模板類

QList(const QList<T> & other);
QList<T> &	operator<<(const QList<T> & other);

💡

定義一個 int 類型的 QList,初始化為1、2、3,再增加 4。
定義一個 QString 類型的 QList,只需要把 改為 ,再初始化。

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QList<int> list;				// 不能在這里初始化list << 1 << 2 << 3;list.append(4);qDebug() << list;            // 不能這樣寫:qDebug(list);QList<QString> strlist;  	// 不能在這里初始化strlist << "b" << "c" << "d";strlist.prepend("a");for (int i = 0; i < strlist.length(); i++)qDebug() << strlist.at(i);       	// 不能格式化輸出 %cQList<QByteArray> qblist;	// 不能在這里初始化qblist << "x" << "y";qblist.append("z");for (int i = 0; i < qblist.length(); i++)qDebug() << qblist.at(i);            // 不能格式化輸出 %creturn 0;
}

在這里插入圖片描述

堆棧窗體

QStackedWidget

Public Functions:QStackedWidget(QWidget * parent = 0);如果單純指定父窗口,但是沒有指定大小,那么是不顯示的int	addWidget(QWidget * widget);增加窗體,增加完后默認會分配一個 index值,從 0 開始int	currentIndex() const;獲取當前顯示窗體的 index值Public Slots:void	setCurrentIndex(int index);設置 第index 個頁面為棧頂(顯示頁面) 			// 一般用這個void	setCurrentWidget(QWidget *widget); Signals:void currentChanged(int index);窗體發生變化后,發出信號,index 代表更換后窗體 index 值

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

widget.cpp

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent)
{// 初始化三個窗體QWidget *firstPageWidget = new QWidget;QWidget *secondPageWidget = new QWidget;QWidget *thirdPageWidget = new QWidget;// 在三個窗體分別設置三個按鈕QPushButton *btn1 = new QPushButton("Page 1", firstPageWidget);QPushButton *btn2 = new QPushButton("Page 2", secondPageWidget);QPushButton *btn3 = new QPushButton("Page 3", thirdPageWidget);// 實例化堆棧窗體對象,把窗體添加到堆棧窗體QStackedWidget *stackedWidget = new QStackedWidget;stackedWidget->addWidget(firstPageWidget);stackedWidget->addWidget(secondPageWidget);stackedWidget->addWidget(thirdPageWidget);//    QListWidget *listWidget = new QListWidget;
//    QListWidgetItem *firstItem = new QListWidgetItem(tr("First"), listWidget);
//    QListWidgetItem *secondItem = new QListWidgetItem(tr("Sencond"), listWidget);
//    QListWidgetItem *thirdItem = new QListWidgetItem(tr("Third"), listWidget);//    listWidget->insertItem(0, firstItem);
//    listWidget->insertItem(1, secondItem);
//    listWidget->insertItem(2, thirdItem);					// 兩種方法都可以,方法一QListWidget *listWidget = new QListWidget;				// 方法二listWidget->addItem(tr("First"));listWidget->addItem(tr("Sencond"));						// 多打了個 n,請忽略listWidget->addItem(tr("Third"));QHBoxLayout *layout = new QHBoxLayout;layout->addWidget(listWidget, 1);layout->addWidget(stackedWidget, 3);this->setLayout(layout);connect(listWidget, SIGNAL(currentRowChanged(int)), stackedWidget, SLOT(setCurrentIndex(int)));// 堆棧窗體的槽是確定的 —— setCurrentIndex(int),也就意味著對應信號的參數也必須和槽匹配this->resize(960, 600);}Widget::~Widget()
{
}

在這里插入圖片描述

UI 實現堆棧窗體

在這里插入圖片描述

布局部分

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

信號與槽

該部分可用代碼實現,也可用 UI 實現。

UI 實現

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

代碼實現(widget.cpp)
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QObject::connect(ui->listWidget, SIGNAL(currentRowChanged(int)), \ui->stackedWidget, SLOT(setCurrentIndex(int)));
}Widget::~Widget()
{delete ui;
}

效果展示
在這里插入圖片描述

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

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

相關文章

學生備考使用臺燈到底好不好?公認好用的護眼臺燈推薦

在現代生活中&#xff0c;許多學生的學習壓力越來越大&#xff0c;面臨的近視幾率也越來越大&#xff0c;特別是初中生&#xff0c;眼睛發育還未完全&#xff0c;使用不恰當的燈光也會對眼睛造成損害&#xff0c;特別是護眼臺燈。雖然護眼臺燈在功能上能夠提供充足、柔和的光線…

harbor倉庫鏡像遷移腳本

import subprocess import json import logging# 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 替換這里的Harbor倉庫地址和憑據 harbor_url "https://harbor.test.com" harbor_name "harbor.test.co…

《文存閱刊》期刊發表簡介

《文存閱刊》以“深研文化創新&#xff0c;崇尚科學真理&#xff0c;堅持雙百方針&#xff0c;打造學術精品”為辦刊宗旨&#xff0c;涵蓋藝術、文學、社科等多項內容&#xff0c;適應了文化市場需求&#xff0c;很好的回應了廣大文化理論工作者的關切&#xff0c;為下一步打造…

ChatGPT新媒體運營神器:輕松駕馭內容創作與傳播

文章目錄 1. 內容創作2. 社交媒體管理3. 用戶互動與客戶服務 《巧用ChatGPT輕松玩轉新媒體運營》內容簡介作者簡介目錄前言/序言本書內容本書特色本書讀者對象獲取方式 隨著互聯網的高速發展&#xff0c;新媒體已經成為了人們獲取信息、交流思想的重要渠道。在這個信息爆炸的時…

【SpringCache】快速入門 通俗易懂

1. 介紹 Spring Cache 是一個框架&#xff0c;實現了基于注解的緩存功能&#xff0c;只需要簡單地加一個注解&#xff0c;就能實現緩存功能。 Spring Cache 提供了一層抽象&#xff0c;底層可以切換不同的緩存實現&#xff0c;例如&#xff1a; EHCache Caffeine Redis(常用…

Centos7、Mysql8.0 load_file函數返回為空的終極解決方法--暨selinux的深入理解

零、問題背景 最近想換房&#xff0c;為了方便自己對比感興趣的房子&#xff0c;因此決定將目標房源的基本信息放在表里&#xff0c;特別是要一目了然的看到眾多房子的各種圖紙和照片&#xff0c;因此決定要在Mysql8.0.34數據庫中以二進制形式保存圖片&#xff08;拋開合理性和…

喝酒誰先倒

劃拳是古老中國酒文化的一個有趣的組成部分。酒桌上兩人劃拳的方法為&#xff1a;每人口中喊出一個數字&#xff0c;同時用手比劃出一個數字。如果誰比劃出的數字正好等于兩人喊出的數字之和&#xff0c;誰就輸了&#xff0c;輸家罰一杯酒。兩人同贏或兩人同輸則繼續下一輪&…

Vue 2.0源碼分析-update

Vue 的 _update 是實例的一個私有方法&#xff0c;它被調用的時機有 2 個&#xff0c;一個是首次渲染&#xff0c;一個是數據更新的時候&#xff1b;由于我們這一章節只分析首次渲染部分&#xff0c;數據更新部分會在之后分析響應式原理的時候涉及。_update 方法的作用是把 VNo…

思維鏈(CoT)提出者 Jason Wei:關于大語言模型的六個直覺

文章目錄 一、前言二、主要內容三、總結 &#x1f349; CSDN 葉庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 Jason Wei 的主頁&#xff1a;https://www.jasonwei.net/ Jason Wei&#xff0c;一位于 2020 年從達特茅斯學院畢業的杰出青年&#xff0c;隨后加盟了…

大數據安全保障的四種關鍵技術

隨著大數據時代的到來&#xff0c;數據安全保障的重要性日益凸顯。大數據安全保障涉及多種關鍵技術&#xff0c;以下是四種關鍵技術的詳細介紹。 數據加密技術 數據加密技術是大數據安全保障的核心技術之一。它通過將明文數據轉化為密文數據&#xff0c;以保護數據的機密性和完…

CSS中 設置文字下劃線 的幾種方法

在網頁設計和開發中&#xff0c;我們經常需要對文字進行樣式設置&#xff0c;包括字體,顏色&#xff0c;大小等&#xff0c;其中&#xff0c;設置文字下劃線是一種常見需求 一 、CSS種使用 text-decoration 屬性來設置文字的裝飾效果&#xff0c;包括下劃線。 常用的取值&…

Visual Studio 2015 中 FFmpeg 開發環境的搭建

Visual Studio 2015 中 FFmpeg 開發環境的搭建 Visual Studio 2015 中 FFmpeg 開發環境的搭建新建控制臺工程拷貝并配置 FFmpeg 開發文件測試FFmpeg 開發文件的下載鏈接 Visual Studio 2015 中 FFmpeg 開發環境的搭建 新建控制臺工程 新建 Win32 控制臺應用程序。 具體流程&…

炫酷不止一面:探索JavaScript動畫的奇妙世界(下)

&#x1f90d; 前端開發工程師&#xff08;主業&#xff09;、技術博主&#xff08;副業&#xff09;、已過CET6 &#x1f368; 阿珊和她的貓_CSDN個人主頁 &#x1f560; 牛客高級專題作者、在牛客打造高質量專欄《前端面試必備》 &#x1f35a; 藍橋云課簽約作者、已在藍橋云…

proftpd安全加固:限制用戶FTP登錄

其實無所謂安全加固&#xff0c;因為proftp默認就是限制用戶FTP登錄的&#xff0c;這里有點凌亂得研究和實驗了proftpd如何進行限制的&#xff0c;以及可能的放開限制。懂了這些才能更好的進行防護配置。 RootLogin指令其實主要作用就是啟用ROOT訪問。通常&#xff0c;proftpd在…

【Fastadmin】一個完整的輪播圖功能示例

目錄 1.效果展示&#xff1a; 列表 添加及編輯頁面同 2.建表&#xff1a; 3.使用crud一鍵生成并創建控制器 4.html頁面 add.html edit.html index.php 5.js頁面 6.小知識點 1.效果展示&#xff1a; 列表 添加及編輯頁面同 2.建表&#xff1a; 表名&#xff1a;fa_x…

【LabVIEW學習】5.數據通信之TCP協議,控制電腦的一種方式

一。tcp連接以及寫數據&#xff08;登錄&#xff09; 數據通信--》協議--》TCP 1.tcp連接 創建while循環&#xff0c;中間加入事件結構&#xff0c;創建tcp連接&#xff0c;寫入IP地址與端口號 2.寫入tcp數據 登錄服務器除了要知道IP地址以及端口以外&#xff0c;需要用戶名與密…

中通單號查詢,中通快遞物流查,備注需要的單號記錄

批量查詢中通快遞單號的物流信息&#xff0c;并對需要的單號記錄進行備注。 所需工具&#xff1a; 一個【快遞批量查詢高手】軟件 中通快遞單號若干 操作步驟&#xff1a; 步驟1&#xff1a;運行【快遞批量查詢高手】軟件&#xff0c;第一次使用的朋友記得先注冊&#xff0c…

快速冪(C語言)

前言 快速冪算法一般用于高次冪取模的題目中&#xff0c;比如求3的10000次方對7取模。這時候有些同學會說&#xff1a;這還不簡單&#xff1f;我直接調用pow函數然后對結果%7不得了么&#xff1f;可是3的10000次方這么龐大的數字&#xff0c;真的能儲存在計算機里么&#xff1f…

HTML行內元素與塊級元素的區別(超詳細)

目錄 行內元素&#x1f338;常見的行內元素&#x1f338;行內元素&#xff08;內聯元素&#xff09;的特性 塊級元素&#x1f338;常見的塊級元素&#x1f338;塊級元素的特性 相互轉換(display)&#x1f338;行內塊狀元素的特性 行內元素 &#x1f338;常見的行內元素 <s…

c#學習相關系列之as和is的相關用法

一、子類和父類的關系 public class Program{static void Main(string[] args){Animal animal new Dog();// Dog dog (Dog)new Animal(); 編譯成功&#xff0c;運行報錯Dog dog (Dog)animal;Dog dog new Dog();Animal animal dog; //等價于Animal animal new Dog();}}pub…