Qt:QLabel、LCD Number、QProgressBar、QCalendarWidget

目錄

一、QLabel

1.屬性

2.設置文本格式

3.設置圖片

4.設置文本對齊方式

5.設置自動換行

6.設置縮進

7.設置邊距

8.設置伙伴關系

二、LCD Number

1.屬性

2.Qt僅允許主線程修改界面?

三、QProgressBar

屬性

四、QCalendarWidget

屬性


一、QLabel

同樣的,QLabel也是QWidget的子控件,QWidget擁有的屬性同樣適用于QLabel。

QLabel也有眾多屬性,主要用來顯示文字信息,屬于顯示類控件。

1.屬性

用于獲取其中的文本。
QLabel->text();
QLabel->textFormat();
獲取文本的格式,Qt中文本的格式可以是以下幾種。
1.Qt::PlainText純文本。
2.Qt::RichText富文本,即文本中支持html標簽等,富文本可以理解為word工具編輯中的文件。
3.Qt::MarkdownText 即MD格式的文本。
4.Qt::AutoText 根據文本內容自動決定文本格式。
QLabel->pixmap();
可以設置QLable內中包含的圖片。
QLabel->scaledContents();
是否拉伸填充,true 或者false,往往在QLabel中有圖片時設置。
QLabel->alignment();
設置QLabel中文本的對齊方式,常見的有居中、靠左。
QLabel->wordWrap();
設置QLabel中長文本是否要自動換行,因為不同于QTextEdit這樣的控件,QLabel不含滾動條。
QLabel->indent();
設置文本縮進。
QLabel->margin();
設置內部文本和邊框的邊距。
QLabel->openExternalLinks();
如果QLabel中包含一段url,設置是否允許點擊訪問。
QLabel->buddy();
給QLabel關聯一個伙伴,點擊QLabel即可激發伙伴,如關聯QCheckBox,點擊則選中它。

2.設置文本格式

    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("# 這是MD的一級標題");

演示效果:

3.設置圖片

    //設置Label的尺寸和窗口一樣大QRect windowRect = this->geometry();ui->label->setGeometry(0,0,windowRect.width(),windowRect.height());//設置Label中的圖片QPixmap pixmap(":/R-C.jpg");ui->label->setPixmap(pixmap);//設置圖片拉伸填充ui->label->setScaledContents(true);

但是在構造函數中的設置是一次性的,在后續拖動窗口大小時,標簽的尺寸并不會發生改變,于是,就有下面這樣的現象:

要想讓圖片大小跟隨窗口尺寸的變化,實現這樣一個效果,需要用到Qt中的事件機制。

Qt中對于用戶的操作分為了兩類,這兩類分別是信號槽機制、事件機制。

如何理解這兩種機制,本質上是離散變量和連續變量的區分,在Qt中,類似于鼠標點擊這樣的操作,一次點擊、兩次點擊.....是可以枚舉的,屬于離散變量,Qt用信號槽機制來處理,而對于拖動窗口變化尺寸這樣的操作,比如從A尺寸變化到B尺寸,本質上經過了一系列的尺寸變化,并不是直接由A變到B,對于這種連續的變化,Qt用事件機制來處理。

而對于窗口尺寸的變化,Qt用resizeEvent函數來處理,QWidget定義了該函數,而現在要想讓窗口尺寸的變化按照程序員的想法實現,需要重寫QWidget中的虛函數,實際上,在框架編程中,Qt可以通過多態的方式來調用程序員重寫的函數,并不需要程序員來調用。

在widget.h中添加聲明
void resizeEvent(QResizeEvent *event) override;

void Widget::resizeEvent(QResizeEvent *event)
{//打印觀察變化中的窗口尺寸qDebug() << event->size();//設置QLabel的尺寸變化跟隨窗口ui->label->setGeometry(0,0,event->size().width(),event->size().height());
}

4.設置文本對齊方式

//水平、垂直方向都居中。
ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

5.設置自動換行

ui->label->setWordWrap(true);

6.設置縮進

ui->label->setIndent(50);//縮進50個像素

在Qt中,這樣設置縮進后,如果文本換行,也是會縮進的,不僅僅是首行會縮進。

7.設置邊距

ui->label->setMargin(50);
//邊距是上下左右都留出對應的像素,如果文本長,則犧牲文本的顯示效果。

8.設置伙伴關系

 ui->label->setBuddy(ui->radioButton);ui->label_2->setBuddy(ui->radioButton_2);

?可以通過按下 Alt + A、Alt+B的快捷鍵選中單選框。

二、LCD Number

1.屬性

?定時器功能:

C++標準庫沒有實現定時器的功能,但是Boost實現了,可以使用。同樣的,Qt也實現了定時器功能,利用的是信號槽機制。QTimer類的對象可以發出timeout的信號,在start方法中設置參數,這個參數用來說明:QTimer類的對象每隔幾秒發出timeout的信號,而每次發出信號,就去執行槽函數,從而實現倒計時的程序。

    timer = new QTimer(this);//timeout信號綁定槽函數connect(timer,&QTimer::timeout,this,&Widget::handle);//設置每隔幾秒發送信號timer->start(1000);

void Widget::handle()
{//先獲取當前的值int value = ui->lcdNumber->intValue();if(value <= 0){timer->stop();}else{ui->lcdNumber->display(value -1);}
}

2.Qt僅允許主線程修改界面?

上述倒計時程序使用QTimer來實現了定時器,那么是否可以使用C++標準庫中的函數,使得每隔一秒,就更新一次界面呢。

那么怎么用C++標準庫實現休眠一秒。

在C++98中,是沒有這樣的函數的,但是在C++11中,有一個函數叫做sleep_for

在頭文件<thread>中,有一個this_thread的命名空間,其中實現了一個sleep_for的函數。

在頭文件<chrono>中,有一個類名為seconds,用來表示秒,是類模板duration實例化出來的類。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//先獲取初始值int val = ui->lcdNumber->intValue();while(true){//休眠1sstd::this_thread::sleep_for(std::chrono::seconds(1));if(val <= 0)break;val -=1;ui->lcdNumber->display(val);}
}

這段代碼實際上,只有計數結束才會顯示LCD Number,因為我們把倒計時的操作寫在了Widget的構造函數中,當構造函數執行完畢,倒計時也結束,所以只顯示了最終結果。

于是,設計這樣一種做法,在構造函數中,新啟一個線程執行上述操作,主線程做展示界面,而新線程做倒計時,是否可行呢?

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);std::thread t([this](){//先獲取初始值int val = this->ui->lcdNumber->intValue();while(true){//休眠1sstd::this_thread::sleep_for(std::chrono::seconds(1));if(val <= 0)break;val -=1;this->ui->lcdNumber->display(val);}});
}

然后實際運行啟動后,控制臺打印了一條日志。

對于Qt這樣的GUI框架,需要專門維護一個線程用來更新界面,就是main函數所在的進程,即主線程,而一個界面中,存在很多隱藏的狀態,Qt為了更新界面時,不引發線程安全問題,直接禁用了Qt中的其他線程修改界面,于是,我們上面自己新啟的線程會被直接中止。

默認情況下,調用槽函數的都是主線程。

在main.cpp中的
return a.exec();

執行a.exec()后,主線程就會進入“事件循環”的狀態,exec()內部是一個死循環,每一次循環,都在執行一些操作。

?

三、QProgressBar

屬性

表示一個進度條

?

我們設置一個程序,每隔100ms進度條就加一

?

void Widget::handle()
{int value = ui->progressBar->value();if(value >= 100)timer->stop();ui->progressBar->setValue(value+1);
}

?

?

可以設置進度條的顏色。

?

?

四、QCalendarWidget

表示一個日歷

屬性

?

?

常見信號

?

?

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

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

相關文章

打造可靠的云基礎架構:Azure 區域與可用性區域

隨著企業業務的全球化擴展和數字化轉型&#xff0c;可靠性已成為企業在選擇云平臺時的重要考量因素。Azure 作為全球領先的云計算服務提供商&#xff0c;通過區域&#xff08;Regions&#xff09;和可用性區域&#xff08;Availability Zones&#xff09;為企業構建高可用性、高…

訂單初版—1.分布式訂單系統的簡要設計文檔

大綱1.訂單系統核心業務流程2.Spring Cloud Alibaba在訂單業務中的落地方案3.面向分布式全鏈路故障設計的高可靠架構方案4.分布式訂單系統的技術棧與代碼規范1.訂單系統核心業務流程(1)生成訂單時序圖(2)支付訂單流程圖(3)取消訂單流程圖這里主要介紹生單和退款兩個核心鏈路&am…

【HarmonyOS】富文本編輯器RichEditor詳解

【HarmonyOS】富文本編輯器RichEditor詳解 一、前言 在信息化高速發展的今天&#xff0c;普通的文本容器&#xff0c;已經不能夠承載用戶豐富的表達欲。富文本展示已經是移動開發中&#xff0c;必備要解決的問題&#xff0c;在鴻蒙中&#xff0c;通過在系統層提供RichEditor控件…

【MySQL進階】在一臺機器上運行多個MySQL實例

目錄 1.使用MySQL Installer安裝MySQL實例 1.1.去官網下載MySQL Installer 1.2.停止mysql服務 1.3.為不同的版本指定不同的安裝目錄 2.配置不同版本的選項文件 2.1.修改數據目錄 2.2.修改基本目錄 2.3.修改端口號 2.4.設置?志?錄 2.5.配置臨時目錄 2.6.修改綁定地…

verilog中timescale指令的使用

1.timescale指令格式timescale <時間單位> / <時間精度>時間單位&#xff1a;它確定了仿真中時間值的基本單位。比如 1ns 就意味著時間值是以納秒為單位來計量的。 時間精度&#xff1a;該參數決定了時間值能夠表示的最小分辨率。例如 1ps 表示時間可以精確到皮秒級…

08_Excel 導入 - 用戶信息批量導入

08_Excel 導入 - 用戶信息批量導入 1. VO 類 java復制編輯Data AllArgsConstructor NoArgsConstructor public class UserInfoBatch4ExcelReq {ExcelProperty(value "用戶姓名")Schema(description "用戶姓名")private String userName;ExcelProperty(va…

【深度學習新浪潮】什么是世界模型?

世界模型(World Model)是人工智能領域中一類通過構建環境的抽象表示來理解和預測外部世界的系統。它通過整合多模態數據(如視覺、語言、傳感器信號)形成對環境的動態認知,并支持智能體在復雜場景中進行決策與規劃。以下從核心概念、解決的問題、關鍵研究、技術路線、現狀與…

React + Express 傳輸加密以及不可逆加密

一、傳輸加密這里用 對稱加密模式 ASE實現。React 前端const CryptoJS require("crypto-js");// 示例1&#xff1a;ECB模式&#xff08;無需IV&#xff09; const encryptECB (plainText, key) > {return CryptoJS.AES.encrypt(plainText, key, {mode: CryptoJS…

瀏覽器(Chrome /Edge)高效使用 - 內部命令/快捷鍵/啟動參數

今天在CSDN上傳文件,提交總是提示續傳失敗,重試了五六次才想到獲取是科學上網的問題,這個時候其實只要重啟瀏覽器即可,但如果手動關閉瀏覽器再次打開,瀏覽器不會恢復之前的多開窗口(會恢復最后一個窗口內多開的標簽頁,但不會恢復其他窗口)。想了想記得 Chrome 流行的時…

【PTA數據結構 | C語言版】連續子序列最大和

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄 題目代碼 題目 給定 n 個整數組成的序列 { a1 ,a2 ,?,an }&#xff0c;“連續子序列”被定義為 { ai ,ai1 ,?,aj }&#xff0c;其中 1≤i≤j≤n。“連續子序列最大和”則被定義為所有連續子序列元素的和中最大…

Vrrp配置和原理

Vrrp配置和原理 文章目錄Vrrp配置和原理概述物理與邏輯拓撲重點vrid虛擬路由器虛擬IP地址及虛擬MAC地址超時時間計算-MASTER_DOWNvip 管理員手動指定方法Master路由器Backup路由器PriorityVRRP報文格式VRRP狀態機從Backup到masterVRRP協議狀態二.優先級一樣比較接口IPVRRP優先級…

可編輯59頁PPT | 某大型集團人工智能數字化轉型SAP解決方案

薦言摘要&#xff1a;某大型集團人工智能數字化轉型中&#xff0c;SAP解決方案扮演著智能中樞角色&#xff0c;深度融合AI技術與核心業務場景&#xff0c;破解傳統系統“數據孤島流程僵化”雙重困局。針對集團跨產業、多業態特點&#xff0c;方案以SAP S/4HANA為數據底座&#…

【RK3568 驅動開發:實現一個最基礎的網絡設備】

RK3568 驅動開發&#xff1a;實現一個最基礎的網絡設備一、引言二、編寫網絡設備驅動代碼1. 核心數據結構與接口2. 核心功能實現3. 網絡命名空間管理4.源代碼三、編譯與驗證1.加載模塊2.驗證網絡四、注意事項一、引言 RK3568 作為一款高性能 ARM 架構處理器&#xff0c;廣泛應…

CAIDCP系列對話:AI 驅動安全

數字時代&#xff0c;AI浪潮翻涌&#xff0c;網絡安全攻防戰已悄然升級&#xff1a; 某工業控制系統遭AI驅動勒索攻擊&#xff1a;攻擊者借 AI 精準捕捉異常網絡掃描、遠程 PowerShell 痕跡&#xff0c;瞬間加密文件索要贖金&#xff1b; 另一邊&#xff0c;某大型科技公司用AI…

ARMv8 沒開mmu執行memset引起的非對齊訪問異常

最近在haps上驗證一個新的芯片&#xff0c;記錄一下memset訪問出錯的問題。在沒開mmu和cache的情況下&#xff0c;對全局變量指針進行memset清零操作&#xff0c;發現每次都會出現異常。最后發現是沒開mmu導致出現了數據非對齊訪問導致報錯。排查EC區域發現是0x25&#xff0c;產…

基于LiveKit Go 實現騰訊云實時音視頻功能

詳細的生產部署建議&#xff0c;適用于 LiveKit Go 服務器 Web 客戶端 TURN/HTTPS。 1. 服務器準備 推薦使用云服務器&#xff08;如阿里云、騰訊云、AWS、Azure等&#xff09;&#xff0c;公網IP&#xff0c;帶寬建議≥10Mbps。系統推薦 Ubuntu 20.04/22.04 或 CentOS 7/8&…

三位一體:Ovis-U1如何以30億參數重構多模態AI格局?

1. 時代命題&#xff1a;多模態統一模型的破局之戰當GPT-4o以萬億級參數構建多模態帝國時&#xff0c;中國AI軍團正在書寫另一種答案。Ovis-U1用30億參數證明&#xff1a;參數量并非決定性因素&#xff0c;架構創新與訓練策略的化學反應&#xff0c;同樣能催生出改變游戲規則的…

圖像處理基礎:鏡像、縮放與矯正

在圖像處理中&#xff0c;鏡像、縮放和矯正操作是常見的圖像變換手段。這些操作可以幫助我們對圖像進行調整&#xff0c;以滿足不同的需求。本文將詳細介紹這三種操作的原理和實現方法&#xff0c;并通過代碼示例展示它們的實際應用。一、圖片鏡像旋轉1.1 什么是鏡像旋轉&#…

「Java案例」猜數游戲

案例實現 猜數字游戲 設計一個三位數的猜數游戲,三位數隨機生成。程序提示用戶輸入一個三位的數字,依照以下的規則決定贏取多少獎金:1) 如果用戶輸入的數字和隨機數字完全一致,輸出:“恭喜恭喜!完全猜對了!獲得三個贊!”2) 如果用戶輸入的數字覆蓋了隨機生成的所有數…

創客匠人解析創始人 IP 內卷:知識變現時代的生存邏輯與破局路徑

當知識付費行業進入 “存量競爭” 階段&#xff0c;創始人 IP 的 “內卷” 已非選擇而是必然。創客匠人在服務數萬知識創業者的實踐中發現&#xff0c;那些實現逆勢增長的案例&#xff0c;其核心差異往往在于創始人是否具備 “從幕后走到臺前” 的決心與能力 —— 這種內卷并非…