9.QT-顯示類控件|Label|顯示不同格式的文本|顯示圖片|文本對齊|自動換行|縮進|邊距|設置伙伴(C++)

Label

QLabel 可以?來顯??本和圖?

屬性說明
textQLabel中的?本
textFormat?本的格式.
? Qt::PlainText 純?本
? Qt::RichText 富?本(?持html標簽)
? Qt::MarkdownText markdown格式
? Qt::AutoText 根據?本內容?動決定?本格式
pixmapQLabel 內部包含的圖?.
scaledContents設為true表?內容?動拉伸填充 QLabel
設為false則不會?動拉伸
alignment對??式.
可以設置?平和垂直?向如何對?.
wordWrap設為true內部的?本會?動換?.
設為false則內部?本不會?動換?.
indent設置?本縮進.?平和垂直?向都?效.
margin內部?本和邊框之間的邊距.
不同于于indent,但是是上下左右四個?向都同時有效.
?indent最多只是兩個?向有效(具體哪兩個?向有效取決于alignment)
openExternalLinks是否允許打開?個外部的鏈接.
(當QLabel?本內容包含url的時候涉及到)
buddy給QLabel關聯?個"伙伴",這樣點擊QLabel時就能激活對應的伙伴.
例如伙伴如果是?個QCheckBox,那么該QCheckBox就會被選中
代碼?例:顯?不同格式的?本

1)在界?上創建三個 QLabel
尺?放??些.objectName分別為label,label_2,label_3
![[Pasted image 20250420101138.png]]

2)修改widget.cpp,設置三個label的屬性

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//把第一個label設置成顯示純文本ui->label->setTextFormat(Qt::PlainText);ui->label->setText("<b>這是一段純文本</b>");ui->label_2->setTextFormat(Qt::RichText);ui->label_2->setText("<b>這是一段富文本</b>");ui->label_3->setTextFormat(Qt::MarkdownText);ui->label_3->setText("# 這是一段markdown文本");
}

![[Pasted image 20250420103816.png]]

代碼?例:顯?圖?

雖然 QPushButton 也可以通過設置圖標的?式設置圖?,但是并?是?個好的選擇.更多的時候還是希望通過 QLabel 來作為?個更單純的顯?圖?的?式
1)在界?上創建?個QLabel, objectName 為 label
![[Pasted image 20250420105618.png]]

2)創建 resource.qrc ?件,并把圖?導?到qrc中
![[Pasted image 20250420105554.png]]

3)修改widget.cpp,給QLabel設置圖?
QWidget大小800x600
![[Pasted image 20250420105805.png]]

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//先把QLabel設置成和窗口一樣大,并且把這個QLabel左上角設置到窗口左上角這里QRect windowRect = this->geometry();ui->label->setGeometry(0,0,windowRect.width(),windowRect.height());QPixmap pixmap(":/miku.jpg");ui->label->setPixmap(pixmap);
}

![[Pasted image 20250420110242.png]]

miku.jpg的尺寸是1222x903

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//先把QLabel設置成和窗口一樣大,并且把這個QLabel左上角設置到窗口左上角這里QRect windowRect = this->geometry();ui->label->setGeometry(0,0,windowRect.width(),windowRect.height());QPixmap pixmap(":/miku.jpg");ui->label->setPixmap(pixmap);//啟動自動拉伸,圖片就能填充滿整個窗口ui->label->setScaledContents(true);
}

![[Pasted image 20250420110453.png]]

但是一拖動,圖片沒有跟著適應窗口
![[Pasted image 20250420110536.png]]

之前的尺寸設置是一次性的,程序運行起來以后,QLabel的尺寸就固定下來了,窗口發生改變,QLabel不會改變
為了解決這個問題,可以在Widget中重寫resizeEvent函數.

Qt中,表示用戶的操作,有兩類概念一個是信號,另一個是事件~~
當用戶拖拽修改窗口大小的時候,就會觸發resize事件(resizeEvent)
像resize這樣的事件,是連續變化的.把窗口尺寸從A拖到B這個過程中,會觸發出一系列的resizeEvent 此時就可以借助resizeEvent來完成上述的功能
可以讓Widget窗口類,重寫父類(QWidget)的resizeEvent虛函數

在鼠標拖動窗口尺寸的過程中這個函數就會被反復調用執行
每次觸發一個resizeEvent事件都會調用一次對應的虛函數
由于此處進行了函數重寫,調用父類的虛函數就會實際調用到子類的對應的函數(多態)
widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void resizeEvent(QResizeEvent *event);
private:Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QResizeEvent>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//先把QLabel設置成和窗口一樣大,并且把這個QLabel左上角設置到窗口左上角這里QRect windowRect = this->geometry();ui->label->setGeometry(0,0,windowRect.width(),windowRect.height());QPixmap pixmap(":/miku.jpg");ui->label->setPixmap(pixmap);//啟動自動拉伸,圖片就能填充滿整個窗口ui->label->setScaledContents(true);
}Widget::~Widget()
{delete ui;
}// 重寫 resizeEvent. 這個函數會在窗???發?改變時被?動調?.
//此處的形參event是非常有用的,這里就包含了觸發這個resize事件這一時刻,窗口的尺寸的數值
void Widget::resizeEvent(QResizeEvent *event)
{qDebug() << event->size();
}

![[Pasted image 20250420123738.png]]

執?程序,此時改變窗???,圖?也會隨之變化.
于此同時,在控制臺?也能夠看到尺?變化的過程

void Widget::resizeEvent(QResizeEvent *event)
{qDebug() << event->size();// 可以直接通過 this->width() 和 this->height() 設置 label 新的尺?, 也可以通過event 參數拿到新的尺?.// ui->label->setGeometry(0, 0, this->width(), this->height());ui->label->setGeometry(0, 0, event->size().width(), event->size().height());
}

![[Pasted image 20250420124345.png]]

此處的 resizeEvent 函數我們沒有?動調?,但是能在窗???變化時被?動調?.這個過程就是依賴C++中的多態來實現的.Qt框架內部管理著QWidget對象表?咱們的窗?.在窗???發?改變時,Qt就會?動調? resizeEvent 函數.
但是由于實際上這個表?窗?的并?是QWidget,?是QWidget的?類,也就是咱們??寫的Widget.此時雖然是通過?類調?函數,但是實際上執?的是?類的函數(也就是我們重寫后的 resizeEvent ).
此處屬于是多態機制的?種經典?法.通過上述過程,就可以把?定義的代碼,插?到框架內部執?.相當于"注冊回調函數“

在實際編程中,指定回調函數其實有很多種寫法:

  1. 設置函數指針
  2. 設置仿函數(函數對象)
  3. 設置lambda
  4. 通過重寫父類虛函數(框架中拿看父類的指針調用這個函數.如果你創建了子類重寫了這個函數此時在多態機制下,實際執行的就是子類的函數了)
  5. Qt的信號槽
代碼?例:?本對?,?動換?,縮進,邊距

1)創建四個label, objectName 分別是 label 到 label_4
并且在 QFrame 中設置 frameShape 為 Box (設置邊框之后看起來會更清晰?些)
![[Pasted image 20250420124851.png]]

QFrame 是 QLabel 的?類.其中 frameShape 屬性?來設置邊框性質.

  • QFrame::Box :矩形邊框
  • QFrame::Panel :帶有可點擊區域的?板邊框
  • QFrame::WinPanel :Windows?格的邊框
  • QFrame::HLine :?平線邊框
  • QFrame::VLine :垂直線邊框
  • QFrame::StyledPanel :帶有可點擊區域的?板邊框,但樣式取決于窗?主題
    ![[Pasted image 20250420125026.png]]

2)編寫widget.cpp,給這四個label設置屬性.

    ui->label->setText("這是一段文本");ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

![[Pasted image 20250420125615.png]]

    ui->label->setText("這是一段文本");ui->label->setAlignment(Qt::AlignRight | Qt::AlignTop);

![[Pasted image 20250420125710.png]]

自動換行
![[Pasted image 20250420130002.png]]

	ui->label_2->setText("這是一段很長的文本這是一段很長的文本這是一段很長的文本這是一段很長的文本這是一段很長的文本這是一段很長的文本這是一段很長的文本");ui->label_2->setWordWrap(true);

![[Pasted image 20250420130102.png]]

    //設置縮進ui->label_3->setText("這是一段文本");ui->label_3->setIndent(50);

![[Pasted image 20250420130256.png]]

    //設置縮進ui->label_3->setText("這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本");ui->label_3->setIndent(50);ui->label_3->setWordWrap(true);

![[Pasted image 20250420130408.png]]

    //設置邊距ui->label_4->setText("這是一段文本");ui->label_4->setMargin(50);

![[Pasted image 20250420130740.png]]

    //設置邊距ui->label_4->setText("這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本這是一段文本");ui->label_4->setMargin(50);

![[Pasted image 20250420131008.png]]

代碼?例:設置伙伴

1)創建兩個label和兩個radioButton.
objectName 分別問 label , label_2 , radioButton , radioButton_2
![[Pasted image 20250420131410.png]]

此處把label中的?本設置為"快捷鍵 &A"這樣的形式.
其中&后?跟著的字符,就是快捷鍵.可以通過alt+A的?式來觸發該快捷鍵.
但是注意,這?的快捷鍵和 QPushButton 的不同.需要搭配alt和單個字?的?式才能觸發.

2)編寫widget.cpp,設置buddy屬性
當然這?也可以使?Qt Designer直接設置

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//設置label和radioButton伙伴關系ui->label->setBuddy(ui->radioButton);ui->label_2->setBuddy(ui->radioButton_2);
}

3)運?程序,可以看到,按下快捷鍵alt+a或者alt+b,即可選中對應的選項.
![[Pasted image 20250420131747.png]]

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

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

相關文章

非參數檢驗題目集

非參數檢驗題目集 對醫學計量資料成組比較&#xff0c;相對參數檢驗來說&#xff0c;非參數秩和檢驗的優點是&#xff08; &#xff09; A. 適用范圍廣 B. 檢驗效能高 C. 檢驗結果更準確 D. 充分利用資料信息 E. 不易出現假陰性錯誤 對于計量資料的比較&#xff0c;在滿足參數…

libdxfrw庫使用總結

在 Win11VS2022CMake 平臺編譯 libdxfrw 庫的挑戰與應對 在當今數字化設計與開發領域&#xff0c;高效處理 CAD 文件格式如 DXF 是眾多項目的關鍵需求。libdxfrw 庫作為一種功能強大的工具&#xff0c;能助力開發者精準解析與寫入 DXF 文件&#xff0c;使其在眾多應用場景中備…

C++學習:六個月從基礎到就業——內存管理:RAII原則

C學習&#xff1a;六個月從基礎到就業——內存管理&#xff1a;RAII原則 本文是我C學習之旅系列的第十九篇技術文章&#xff0c;也是第二階段"C進階特性"的第四篇&#xff0c;主要介紹C中的RAII原則及其在資源管理中的應用。查看完整系列目錄了解更多內容。 引言 在…

【愚公系列】《Python網絡爬蟲從入門到精通》056-Scrapy_Redis分布式爬蟲(Scrapy-Redis 模塊)

&#x1f31f;【技術大咖愚公搬代碼&#xff1a;全棧專家的成長之路&#xff0c;你關注的寶藏博主在這里&#xff01;】&#x1f31f; &#x1f4e3;開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主&#xff01; &#x1f…

PyTorch基礎筆記

PyTorch張量 多維數組&#xff1a;張量可以是標量&#xff08;0D&#xff09;、向量&#xff08;1D&#xff09;、矩陣&#xff08;2D&#xff09;或更高維的數據&#xff08;3D&#xff09;。 數據類型&#xff1a;支持多種數據類型&#xff08;如 float32, int64, bool 等&a…

OSCP - Proving Grounds - Sar

主要知識點 路徑爆破cronjob 腳本劫持提權 具體步驟 依舊nmap 開始,開放了22和80端口 Nmap scan report for 192.168.192.35 Host is up (0.43s latency). Not shown: 65524 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh Open…

存儲/服務器內存的基本概念簡介

為什么寫這個文章&#xff1f;今天處理一個powerstore 3000T 控制器&#xff0c;控制器上電后&#xff0c;亮一下燈就很快熄滅了&#xff0c;然后embedded module上和io module不加電&#xff0c;過一整子系統自動就下電了&#xff0c;串口沒有任何輸出。剛開始判斷是主板的問題…

軟件開發指南——GUI 開發方案推薦

1. LVGL (Light and Versatile Graphics Library) 適用場景&#xff1a;嵌入式設備、資源受限環境 優勢&#xff1a; 專為嵌入式設計的開源 GUI 庫&#xff0c;內存占用極小&#xff08;最低僅需 64KB RAM&#xff09;支持觸摸屏、硬件加速&#xff08;如 STM32 的 LTDC&…

8 編程筆記全攻略:Markdown 語法精講、Typora 編輯器全指南(含安裝激活、基礎配置、快捷鍵詳解、使用技巧)

1 妙筆在手&#xff0c;編程無憂&#xff01; 1.1 編程為啥要做筆記&#xff1f;這答案絕了&#xff01; 嘿&#xff0c;各位鍵盤魔法師&#xff01;學編程不記筆記&#xff0c;就像吃火鍋不配冰可樂 —— 爽到一半直接噎住&#xff01;你以為自己腦子是頂配 SSD&#xff0c;結…

LeetCode -- Flora -- edit 2025-04-16

1.兩數之和 1. 兩數之和 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數&#xff0c;并返回它們的數組下標。 你可以假設每種輸入只會對應一個答案&#xff0c;并且你不能使用兩次相同的元素。 你可以按…

web后端語言下篇

#作者&#xff1a;允砸兒 #日期&#xff1a;乙巳青蛇年 三月廿一 筆者今天將web后端語言PHP完結一下&#xff0c;后面還會寫一個關于python的番外。 PHP函數 PHP函數它和筆者前面寫的js函數有些許類似&#xff0c;都是封裝的概念。將實現某一功能的代碼塊封裝到一個結構中…

LeetCode 259 題全解析:Swift 快速找出“滿足條件”的三人組

文章目錄 摘要描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a; 題解答案&#xff08;Swift&#xff09;題解代碼分析示例測試及結果時間復雜度空間復雜度總結 摘要 本文圍繞 LeetCode 259 題“較小的三數之和”&#xff0c;通過 Swift 給出兩種解法&#xff0c;并…

第八節:React HooksReact 18+新特性-React Server Components (RSC) 工作原理

? 與SSR區別&#xff1a;零客戶端JS、服務端數據直出 ? 搭配Next.js 14使用場景 React Server Components (RSC) 工作原理及 Next.js 14 應用場景解析 一、RSC 核心工作原理 React Server Components (RSC) 是 React 18 引入的顛覆性特性&#xff0c;其設計目標是 服務端與…

萬字解析TCP

通過學習視頻加博客的組合形式&#xff0c;整理了一些關于TCP協議的知識。 *圖源&#xff1a;臨界~的csdn博客。 一、TCP建立連接 TCP的建立連接&#xff0c;大致可以分為面向連接、TCP報文結構、TCP的三次握手、TCP的建立狀態、SYN泛洪攻擊。 1.1、面向連接 面向連接 --- …

前端vue+typeScritp+elementPlus基礎頁面實現:

效果&#xff1a; 前端代碼&#xff1a; index.vue: <template><el-container><el-main><el-card class"search-card" shadow"never"><transition :enter-active-class"proxy?.animate.searchAnimate.enter" :le…

微電網與分布式能源:智能配電技術的場景化落地

安科瑞顧強 隨著數字化轉型與能源革命的加速推進&#xff0c;電力系統正經歷從傳統模式向智能化、網絡化方向的深刻變革。用戶側的智能配電與智能用電技術作為這一變革的核心驅動力&#xff0c;正在重塑電力行業的生態格局。本文將從技術架構、應用場景及未來趨勢等維度&#…

綠幕摳圖直播軟件-藍松摳圖插件--使用相機直播,燈光需要怎么打?

使用SONY相機進行綠幕摳圖直播時&#xff0c;燈光布置是關鍵&#xff0c;直接影響摳圖效果和直播畫質。以下是詳細的燈光方案和注意事項&#xff1a; 一、綠幕燈光布置核心原則 均勻照明&#xff1a;綠幕表面光線需均勻&#xff0c;避免陰影和反光&#xff08;亮度差控制在0.5…

Linux Privilege Escalation: LD_PRELOAD

聲明&#xff1a;本文所有操作需在授權環境下進行&#xff0c;嚴禁非法使用&#xff01; 0x01 什么是 LD_PRELOAD&#xff1f; LD_PRELOAD 是 Linux 系統中一個特殊的環境變量&#xff0c;它允許用戶在程序啟動時優先加載自定義的動態鏈接庫&#xff08;.so 文件&#xff09;&…

程序性能(1)嵌入式基準測試工具

程序性能(1)嵌入式基準測試工具 Author&#xff1a;Once Day date: 2025年4月19日 漫漫長路&#xff0c;才剛剛開始… 全系列文檔查看&#xff1a;Perf性能分析_Once-Day的博客-CSDN博客 參考文檔: CPU Benchmark – MCU Benchmark – CoreMark – EEMBC Embedded Micropr…

ArrayList的subList的數據仍是集合

ArrayList的subList結果不可強轉成ArrayList&#xff0c;否則會拋出 ClassCastException異常 ? 級別&#xff1a; 【CRITICAL】 ? 規約類型&#xff1a;BUG ? 最壞影響&#xff1a; 程序錯誤&#xff0c;拋出異常 說明&#xff1a;subList 返回的是ArrayList的內部類SubL…