做網(wǎng)站圖片路徑做緩存嗎快速網(wǎng)站輕松排名
文章目錄
- 一、QLabel類介紹
- 二、Properties(屬性)
- 三、Public Functions(公共函數(shù))
- 1.構(gòu)造函數(shù)
- 2.alignment與setAlignment函數(shù) -- 標簽內(nèi)容的對齊方式
- 3.buddy與setBuddy函數(shù) -- QLabel關(guān)聯(lián)的伙伴控件
- 4.hasScaledContents與setScaledContents函數(shù)-- 是否自動縮放其顯示的內(nèi)容以適應(yīng)控件的大小
- 5.hasSelectedText與selectedText函數(shù)--文本選中
- 6. indent與setIndent函數(shù)--標簽文本的縮進像素值
- 7.margin與setMargin函數(shù)--邊距的寬度
- 8.movie與setMovie函數(shù) -- 標簽上的動畫QMovie
- 9.openExternalLinks與setOpenExternalLinks函數(shù)--控制顯示外部鏈接
- 10.picture與setPicture函數(shù)--設(shè)置QPicture對象
- 11.pixmap與setPixmap函數(shù)--設(shè)置QPixmap對象
- 12.selectionStart函數(shù)--獲取選中文本的起始索引
- 13.setSelection函數(shù)--指定文本選中的范圍
- 14.textFormat與setTextFormat函數(shù)--標簽的文本格式
- 15.text與setText函數(shù)--設(shè)置文本
- 16.textInteractionFlags與setTextInteractionFlags函數(shù) -- 標簽文本交互標志
- 17.wordWrap與setWordWrap函數(shù)--標簽文本自動換行
- 四、Reimplemented Public Functions(重載)
- 1.heightForWidth函數(shù)
- 2.minimumSizeHint函數(shù)
- 3.sizeHint函數(shù)
- 五、Public Slots(公共槽函數(shù))
- 1.clear函數(shù)--清除QLabel控件中顯示的所有內(nèi)容
- 2.setMovie函數(shù)--設(shè)置標簽內(nèi)容為QMovie對象
- 3.setNum函數(shù)--設(shè)置標簽內(nèi)容為傳入數(shù)值的文本表示
- 4.setPicture函數(shù)--設(shè)置標簽 的內(nèi)容為QPicture對象
- 5.setPixmap函數(shù)--設(shè)置標簽控件為QPixmap對象
- 6.setText函數(shù)--設(shè)置標簽控件的文本
- 六、Signals(信號)
- 1.linkActivated信號
- 2.linkHovered信號
- 七、Reimplemented Protected Functions(重載)
- 1.changeEvent函數(shù)
- 2.contextMenuEvent函數(shù)--右鍵點擊上下文菜單事件
- 3.event函數(shù)--接收與處理所有事件
- 4.focusInEvent函數(shù)-獲得焦點事件
- 5.focusNextPrevChild函數(shù)--焦點轉(zhuǎn)移事件
- 6.focusOutEvent函數(shù)--失去焦點事件
- 7.keyPressEvent函數(shù) -- 鍵盤按鍵事件
- 8.mouseMoveEvent函數(shù)--鼠標移動事件
- 9.mousePressEvent函數(shù)--鼠標按鍵按下事件
- 10.mouseReleaseEvent函數(shù) --鼠標按鍵釋放事件
- 11.paintEvent函數(shù) -- 控件繪制事件
一、QLabel類介紹
??QLabel控件是一個用于顯示內(nèi)容的控件,可以是文本、圖像、動畫或數(shù)字。它不提供用戶交互功能(即不提供用戶輸入事件的處理),但可以配置其外觀和布局。QLabel可以顯示純文本或富文本,開發(fā)者需要根據(jù)需要選擇合適的設(shè)置方式。可以通過設(shè)置屬性來調(diào)整文本的對齊方式、換行方式等。QLabel還可以與其它控件配合使用,通過設(shè)置焦點助記符來提高用戶體驗,這將把鍵盤焦點設(shè)置到另一個控件上。
二、Properties(屬性)
-
alignment : Qt::Alignment–標簽內(nèi)容的對齊方式
這個屬性保存了標簽內(nèi)容的對齊方式。默認情況下,標簽的內(nèi)容是左對齊并且垂直居中。
這個屬性的訪問函數(shù)如下:
//用于獲取當前標簽內(nèi)容的對齊方式 Qt::Alignment alignment() const //用于設(shè)置標簽內(nèi)容的對齊方式 void setAlignment(Qt::Alignment)
Qt::Alignment是一個枚舉類型,常見的對齊方式有:
Qt::AlignLeft
:左對齊。Qt::AlignRight
:右對齊。Qt::AlignHCenter
:水平居中對齊。Qt::AlignTop
:頂部對齊。Qt::AlignBottom
:底部對齊。Qt::AlignVCenter
:垂直居中對齊。- 還可以通過位或操作組合使用上述對齊方式,例如
Qt::AlignLeft | Qt::AlignVCenter
表示左對齊且垂直居中。
-
hasSelectedText : const bool–檢查是否有文本被用戶選中
這個屬性用于檢查是否有文本被用戶選中,如果有,則返回
true
,否則返回false
。默認情況下,沒有文本被選中,因此屬性的值是false
。注意事項:
- 為了使
QLabel
支持文本選擇,需要設(shè)置textInteractionFlags
屬性,使其包含TextSelectableByMouse
或TextSelectableByKeyboard
。TextSelectableByMouse
允許用戶通過鼠標選擇文本,而TextSelectableByKeyboard
允許用戶通過鍵盤選擇文本。并使用hasSelectedText()
來檢查是否有文本被選中,以及使用selectedText()
來獲取被選中的文本。
- 為了使
-
indent : int – 標簽文本的縮進像素值
這個屬性保存了標簽文本的縮進像素值。如果標簽顯示文本,縮進根據(jù)alignment()的值應(yīng)用于不同的邊緣:如果alignment()是Qt::AlignLeft,則應(yīng)用于左邊緣;如果是Qt::AlignRight,則應(yīng)用于右邊緣;如果是Qt::AlignTop,則應(yīng)用于頂部邊緣;如果是Qt::AlignBottom,則應(yīng)用于底部邊緣。
這個屬性的訪問函數(shù)為:
int indent() const // 獲取當前縮進值的函數(shù) void setIndent(int) // 設(shè)置縮進值的函數(shù)
注意事項:
- 如果
indent
屬性被設(shè)置為負數(shù),或者沒有明確設(shè)置,QLabel
將自動計算有效縮進。如果frameWidth()
返回的邊框?qū)挾葹?,則有效縮進為0;如果邊框?qū)挾却笥?,則有效縮進為當前字體中"x"字符寬度的一半。 - 默認情況下,縮進是-1,意味著有效縮進按照上述方式計算。
- 縮進屬性與
alignment
(對齊方式)、margin
(邊距)、frameWidth
(框架寬度)和font
(字體)等屬性相關(guān)聯(lián)
- 如果
-
margin : int – 邊距的寬度
這個屬性保存了邊距的寬度。即控件內(nèi)部內(nèi)容與邊框之間的空間寬度。默認邊距是0。
這個屬性的訪問函數(shù):
int margin() const // 獲取當前邊距值的函數(shù) void setMargin(int) // 設(shè)置邊距值的函數(shù)
-
openExternalLinks : bool – 控件在顯示鏈接時的行為
這個屬性用來保存
QLabel
控件在顯示鏈接時的行為。默認情況下,openExternalLinks
的值是false
。如果設(shè)置為true
,當用戶點擊鏈接時,QLabel
將自動使用QDesktopServices::openUrl()
函數(shù)打開鏈接對應(yīng)的網(wǎng)頁或資源;如果設(shè)置為true
,發(fā)出linkActivated()
信號,用戶可以連接這個信號來自定義鏈接被激活時的行為。這個屬性的訪問函數(shù):
bool openExternalLinks() const // 獲取是否自動打開外部鏈接的設(shè)置 void setOpenExternalLinks(bool open) // 設(shè)置是否自動打開外部鏈接
注意事項:
- 為了使
QLabel
能夠識別和響應(yīng)鏈接點擊事件,需要設(shè)置textInteractionFlags
屬性,使其包含LinksAccessibleByMouse
或LinksAccessibleByKeyboard
。LinksAccessibleByMouse
允許用戶通過鼠標點擊鏈接,而LinksAccessibleByKeyboard
允許用戶通過鍵盤操作選擇和激活鏈接。
- 為了使
-
pixmap : QPixmap – 控件當前顯示的圖像
這個屬性用于保存
QLabel
控件當前顯示的圖像(pixmap)。這個屬性的訪問方法:
QPixmap pixmap(Qt::ReturnByValueConstant) const // 按值獲取圖像的函數(shù) void setPixmap(const QPixmap &) // 設(shè)置圖像的函數(shù)
注意事項:
- 通過
setPixmap(const QPixmap &)
函數(shù)設(shè)置圖像時,會清除QLabel
控件之前顯示的所有內(nèi)容,包括文本和之前設(shè)置的圖像。同時,如果之前有設(shè)置快捷鍵伙伴(buddy shortcut),也會被禁用。
- 通過
-
scaledContents : bool – 是否自動縮放其顯示的內(nèi)容以適應(yīng)控件的大小
這個屬性用于控制
QLabel
控件是否自動縮放其顯示的內(nèi)容(如圖像或文本)以適應(yīng)控件的大小。默認情況下,scaledContents
是false
,這意味著內(nèi)容不會自動縮放來填充控件空間,而是保持其原始尺寸。當scaledContents
設(shè)置為true
時,如果QLabel
正在顯示一個圖像(pixmap),這個圖像會被縮放以填充控件的所有可用空間。這可以確保圖像完全適合控件的尺寸,但可能會導(dǎo)致圖像失真。這個屬性的訪問函數(shù):
bool hasScaledContents() const // 檢查是否啟用了內(nèi)容縮放的函數(shù) void setScaledContents(bool) // 設(shè)置是否縮放內(nèi)容以填充空間的函數(shù)
-
selectedText : const QString – 控件中當前被用戶選中的文本
這個屬性保存了
QLabel
控件中當前被用戶選中的文本。默認情況下,selectedText
屬性是空的,表示沒有文本被選中這個屬性的訪問函數(shù):
QString selectedText() const // 獲取當前選中文本的函數(shù)
注意事項:
- 為了使
QLabel
支持文本選擇,需要設(shè)置textInteractionFlags
屬性,使其包含TextSelectableByMouse
或TextSelectableByKeyboard
。TextSelectableByMouse
允許通過鼠標選擇文本,而TextSelectableByKeyboard
允許通過鍵盤選擇文本。
- 為了使
-
text : QString – 標簽的文本
這個屬性保存了標簽的文本。如果沒有設(shè)置文本,將返回一個空字符串。設(shè)置文本會清除任何之前的內(nèi)容。
這個屬性的訪問函數(shù):
QString text() const // 獲取當前文本的函數(shù) void setText(const QString &) // 設(shè)置文本的函數(shù)
注意事項:
QLabel
適合顯示小型富文本文檔,這些文檔的字體、文本顏色和鏈接顏色等設(shè)置可以從標簽的調(diào)色板和字體屬性中獲取。對于較大的文檔,建議使用只讀模式的QTextEdit
控件,因為它可以提供滾動條等額外功能。
-
textFormat : Qt::TextFormat – 標簽的文本樣式
這個屬性保存了標簽的文本格式。默認格式是 Qt::AutoText,這意味著
QLabel
將嘗試自動檢測文本的格式,根據(jù)輸入內(nèi)容決定是將其顯示為純文本還是富文本。這個屬性的訪問函數(shù):
Qt::TextFormat textFormat() const // 獲取當前文本格式的函數(shù) void setTextFormat(Qt::TextFormat) // 設(shè)置文本格式的函數(shù)
-
textInteractionFlags : Qt::TextInteractionFlags – 控件在顯示文本時應(yīng)如何響應(yīng)用戶的輸入操作
這個屬性保存了
QLabel
控件在顯示文本時應(yīng)如何響應(yīng)用戶的輸入操作。這個屬性影響用戶如何與標簽中的文本進行交互,例如,是否可以通過鼠標或鍵盤選擇文本,或者是否可以使用鍵盤操作鏈接。這個屬性的訪問函數(shù):
Qt::TextInteractionFlags textInteractionFlags() const // 獲取當前文本交互標志的函數(shù) void setTextInteractionFlags(Qt::TextInteractionFlags flags) // 設(shè)置文本交互標志的函數(shù)
-
wordWrap : bool – 標簽的自動換行策略
這個屬性保存了
QLabel
控件中文本的自動換行策略。默認情況下,自動換行是禁用的。- 當
wordWrap
設(shè)置為true
時,如果文本超出了標簽的寬度,它將在單詞的邊界處自動換行,以確保文本不會溢出標簽的邊界。 - 如果
wordWrap
設(shè)置為false
,則文本不會自動換行,如果文本超出了標簽的寬度,它可能會被截斷或溢出。
這個屬性的訪問函數(shù):
bool wordWrap() const // 獲取當前是否啟用自動換行的函數(shù) void setWordWrap(bool on) // 設(shè)置是否啟用自動換行的函數(shù)
- 當
三、Public Functions(公共函數(shù))
1.構(gòu)造函數(shù)
-
構(gòu)造一個顯示文本的標簽
QLabel::QLabel(const QString &text, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
-
函數(shù)說明:
這是
QLabel
類的構(gòu)造函數(shù)之一,用于初始化一個QLabel
對象,使其能夠顯示指定的文本。 -
參數(shù)說明:
const QString &text
表示標簽將要顯示的文本內(nèi)容。QWidget *parent
是新創(chuàng)建的標簽的父控件,控件通常通過父/子關(guān)系組織,子控件通常在父控件內(nèi)部顯示。如果parent
參數(shù)是nullptr
,那么QLabel
將作為一個獨立的窗口被創(chuàng)建。Qt::WindowFlags f
是用于定義窗口屬性的標志。如是否可調(diào)整大小、是否可最小化等。這些標志將傳遞給QFrame
的構(gòu)造函數(shù),因為QLabel
繼承自QFrame
。
-
示例:
// 創(chuàng)建一個帶有文本的標簽,作為某個父窗口的子控件 QLabel *myLabel = new QLabel("Hello, World!", myParentWidget);// 創(chuàng)建一個頂級窗口的標簽,顯示不同的文本 QLabel *topLevelLabel = new QLabel("I am a top-level window", nullptr);
-
-
構(gòu)造一個空標簽
QLabel::QLabel(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
-
函數(shù)說明:
用于創(chuàng)建一個不包含任何文本或圖像的空
QLabel
對象。 -
示例:
// 創(chuàng)建一個空的標簽作為某個父控件的子控件 QWidget *myWidget = new QWidget; QLabel *myLabel = new QLabel(myWidget); // 后續(xù)設(shè)置標簽的文本 myLabel->setText("Welcome to my application!");
-
2.alignment與setAlignment函數(shù) – 標簽內(nèi)容的對齊方式
//用于獲取當前標簽內(nèi)容的對齊方式
Qt::Alignment alignment() const
//用于設(shè)置標簽內(nèi)容的對齊方式
void setAlignment(Qt::Alignment)
Qt::Alignment是一個枚舉類型,常見的對齊方式有:
Qt::AlignLeft
:左對齊。Qt::AlignRight
:右對齊。Qt::AlignHCenter
:水平居中對齊。Qt::AlignTop
:頂部對齊。Qt::AlignBottom
:底部對齊。Qt::AlignVCenter
:垂直居中對齊。- 還可以通過位或操作組合使用上述對齊方式,例如
Qt::AlignLeft | Qt::AlignVCenter
表示左對齊且垂直居中。
3.buddy與setBuddy函數(shù) – QLabel關(guān)聯(lián)的伙伴控件
-
buddy函數(shù)
QWidget *QLabel::buddy() const
-
函數(shù)說明:
用于獲取與
QLabel
關(guān)聯(lián)的伙伴(buddy)控件。如果沒有設(shè)置伙伴控件,buddy()
函數(shù)將返回nullptr
?;锇榭丶ǔJ桥c標簽相鄰的可交互控件,如QLineEdit
、QComboBox
等。當用戶激活標簽上的助記符時,焦點將自動轉(zhuǎn)移到伙伴控件上。伙伴機制是Qt中實現(xiàn)用戶界面便捷訪問的一種方式,特別是通過鍵盤快捷方式快速定位。
-
-
setBuddy函數(shù)
void QLabel::setBuddy(QWidget *buddy)
-
函數(shù)說明:
用于為
QLabel
設(shè)置一個伙伴控件。當設(shè)置了伙伴控件后,如果用戶按下標簽文本中通過和號(&)指定的快捷鍵,鍵盤焦點會自動轉(zhuǎn)移到伙伴控件上。例如,如果標簽文本是 “&Name:”,則按下 Alt+N 會將焦點移動到伙伴控件。如果需要取消已經(jīng)設(shè)置的伙伴,可以通過傳遞nullptr
給setBuddy
函數(shù)來實現(xiàn)。 -
示例:
QLineEdit *nameEdit = new QLineEdit(this); QLabel *nameLabel = new QLabel("&Name:", this); nameLabel->setBuddy(nameEdit); QLineEdit *phoneEdit = new QLineEdit(this); QLabel *phoneLabel = new QLabel("&Phone:", this); phoneLabel->setBuddy(phoneEdit);
將其設(shè)置布局,當用戶在窗口中按下 Alt+N 時,焦點會自動跳轉(zhuǎn)到 nameEdit;當用戶按下 Alt+P 時,焦點會自動跳轉(zhuǎn)到 phoneEdit。
-
4.hasScaledContents與setScaledContents函數(shù)-- 是否自動縮放其顯示的內(nèi)容以適應(yīng)控件的大小
bool hasScaledContents() const // 檢查是否啟用了內(nèi)容縮放的函數(shù)
void setScaledContents(bool) // 設(shè)置是否縮放內(nèi)容以填充空間的函數(shù)
-
函數(shù)說明
用于控制
QLabel
控件是否自動縮放其顯示的內(nèi)容(如圖像或文本)以適應(yīng)控件的大小。默認情況下,scaledContents
是false
,這意味著內(nèi)容不會自動縮放來填充控件空間,而是保持其原始尺寸。當scaledContents
設(shè)置為true
時,如果QLabel
正在顯示一個圖像(pixmap),這個圖像會被縮放以填充控件的所有可用空間。這可以確保圖像完全適合控件的尺寸,但可能會導(dǎo)致圖像失真。
5.hasSelectedText與selectedText函數(shù)–文本選中
bool hasSelectedText() const //標簽中文本是否被選中
QString selectedText() const // 獲取當前選中文本的函數(shù)
-
函數(shù)說明:
-
hasSelectedText()函數(shù)用于檢查是否有文本被用戶選中,如果有,則返回
true
,否則返回false
。默認情況下,沒有文本被選中,因此屬性的值是false
。 -
selectedText()函數(shù)用于獲取
QLabel
控件中當前被用戶選中的文本。
-
-
注意事項:
- 為了使
QLabel
支持文本選擇,需要設(shè)置textInteractionFlags
屬性,使其包含TextSelectableByMouse
或TextSelectableByKeyboard
。TextSelectableByMouse
允許用戶通過鼠標選擇文本,而TextSelectableByKeyboard
允許用戶通過鍵盤選擇文本。并使用hasSelectedText()
來檢查是否有文本被選中,以及使用selectedText()
來獲取被選中的文本。
- 為了使
6. indent與setIndent函數(shù)–標簽文本的縮進像素值
int indent() const // 獲取當前縮進值的函數(shù)
void setIndent(int) // 設(shè)置縮進值的函數(shù)
-
函數(shù)說明:
- indent()函數(shù)用于獲取當前縮進值
- setIndent()函數(shù)用于設(shè)置縮進值
-
注意事項:
-
如果標簽顯示文本,縮進根據(jù)alignment()的值應(yīng)用于不同的邊緣:如果alignment()是Qt::AlignLeft,則應(yīng)用于左邊緣;如果是Qt::AlignRight,則應(yīng)用于右邊緣;如果是Qt::AlignTop,則應(yīng)用于頂部邊緣;如果是Qt::AlignBottom,則應(yīng)用于底部邊緣。
-
如果
indent
屬性被設(shè)置為負數(shù),或者沒有明確設(shè)置,QLabel
將自動計算有效縮進。如果frameWidth()
返回的邊框?qū)挾葹?,則有效縮進為0;如果邊框?qū)挾却笥?,則有效縮進為當前字體中"x"字符寬度的一半。 -
默認情況下,縮進是-1,意味著有效縮進按照上述方式計算。
-
縮進屬性與
alignment
(對齊方式)、margin
(邊距)、frameWidth
(框架寬度)和font
(字體)等屬性相關(guān)聯(lián)
-
7.margin與setMargin函數(shù)–邊距的寬度
int margin() const // 獲取當前邊距值的函數(shù)
void setMargin(int) // 設(shè)置邊距值的函數(shù)
-
函數(shù)說明:
-
margin()函數(shù)用于獲取當前邊距值。即控件內(nèi)部內(nèi)容與邊框之間的空間寬度。默認邊距是0。
-
setMargin()函數(shù)用于設(shè)置邊距值
-
8.movie與setMovie函數(shù) – 標簽上的動畫QMovie
-
movie函數(shù)
QMovie *QLabel::movie() const
-
函數(shù)說明:
用于獲取當前在標簽上設(shè)置的
QMovie
對象的指針。QMovie
類用于加載和播放動畫,通常是 .gif 格式的動畫。- 如果
QLabel
使用setMovie(QMovie *)
成功設(shè)置了動畫,movie()
將返回該動畫對象的指針。 - 如果沒有為標簽設(shè)置動畫,或者之前設(shè)置的動畫已經(jīng)被刪除或停止,
movie()
將返回nullptr
。
- 如果
-
-
setMovie函數(shù)
[slot] void QLabel::setMovie(QMovie *movie)
-
函數(shù)說明:
setMovie(QMovie *movie)
是QLabel
類的一個槽函數(shù),用于將一個QMovie
對象設(shè)置為標簽的內(nèi)容。QMovie
通常用于播放動畫圖像,如 GIF 文件。當調(diào)用setMovie()
函數(shù)時,之前標簽中顯示的任何內(nèi)容(文本、圖像等)都將被清除,并替換為指定的動畫。 -
示例
// 創(chuàng)建一個標簽和動畫對象 QLabel *label = new QLabel(this); QMovie *movie = new QMovie("path/to/your/animation.gif");// 將動畫設(shè)置到標簽上 label->setMovie(movie);// 啟動動畫播放 movie->start();// 稍后,可能需要檢查當前標簽是否有動畫,或者獲取動畫對象 QMovie *currentMovie = label->movie();if (currentMovie) {// 動畫存在,可以進行一些操作,比如暫?;騽h除currentMovie->pause(); } else {// 沒有動畫 }
-
注意事項:
- 需要注意的是,
QLabel
不會接管傳入的QMovie
對象的所有權(quán)。這意味著QMovie
對象的生命周期需要由其他地方管理,QLabel
只是使用這個對象來播放動畫,并不會在內(nèi)部刪除它。 - 設(shè)置動畫后,如果之前有設(shè)置伙伴快捷鍵(通過
setBuddy()
),則該快捷鍵將被自動禁用,因為動畫播放期間可能不適用快捷鍵。
- 需要注意的是,
-
9.openExternalLinks與setOpenExternalLinks函數(shù)–控制顯示外部鏈接
bool openExternalLinks() const // 獲取是否自動打開外部鏈接的設(shè)置
void setOpenExternalLinks(bool open) // 設(shè)置是否自動打開外部鏈接
-
函數(shù)說明:
-
openExternalLinks()函數(shù)用于獲取openExternalLinks屬性的值
-
setOpenExternalLinks()函數(shù)用于設(shè)置openExternalLinks屬性的值
這個屬性用來保存
QLabel
控件在顯示鏈接時的行為。默認情況下,openExternalLinks
的值是false
。如果設(shè)置為true
,當用戶點擊鏈接時,QLabel
將自動使用QDesktopServices::openUrl()
函數(shù)打開鏈接對應(yīng)的網(wǎng)頁或資源;如果設(shè)置為true
,發(fā)出linkActivated()
信號,用戶可以連接這個信號來自定義鏈接被激活時的行為。
-
-
示例:
// 假設(shè)有一個 QLabel 實例 QLabel *linkLabel = new QLabel(this);// 設(shè)置 QLabel 顯示的文本,包含一個鏈接 linkLabel->setText("Visit our <a href='https://www.example.com'>website</a>.");// 連接 linkActivated 信號以便在用戶點擊鏈接時執(zhí)行自定義操作 connect(linkLabel, &QLabel::linkActivated, this, &MyClass::onLinkActivated);// 設(shè)置 QLabel 屬性,自動打開鏈接而不是發(fā)出信號 linkLabel->setOpenExternalLinks(true);// 以下是 MyClass 中定義的槽函數(shù),用于處理鏈接點擊事件 void MyClass::onLinkActivated(const QString &link) {qDebug() << "Link activated:" << link;// 可以在這里添加自定義代碼,比如打開一個新的瀏覽器窗口 }// 如果希望手動處理鏈接點擊事件而不是自動打開鏈接,可以設(shè)置為 false linkLabel->setOpenExternalLinks(false);
-
注意事項:
- 為了使
QLabel
能夠識別和響應(yīng)鏈接點擊事件,需要設(shè)置textInteractionFlags
屬性,使其包含LinksAccessibleByMouse
或LinksAccessibleByKeyboard
。LinksAccessibleByMouse
允許用戶通過鼠標點擊鏈接,而LinksAccessibleByKeyboard
允許用戶通過鍵盤操作選擇和激活鏈接。
- 為了使
10.picture與setPicture函數(shù)–設(shè)置QPicture對象
-
picture函數(shù)
const QPicture *QLabel::picture() const
-
函數(shù)說明:
用于獲取與標簽關(guān)聯(lián)的
QPicture
對象的指針。此函數(shù)已被標記為過時,不建議使用
-
-
setPicture函數(shù)
[slot] void QLabel::setPicture(const QPicture &picture)
-
函數(shù)說明:
這是
QLabel
類的一個槽函數(shù),用于將QLabel
的內(nèi)容設(shè)置為一個QPicture
對象。 -
示例:
// 創(chuàng)建一個標簽和一個 QPicture 對象 QLabel *label = new QLabel(this); QPicture myPicture;// 假設(shè)我們通過某種方式填充了 myPicture 對象 // ...// 將 QPicture 對象設(shè)置為標簽的內(nèi)容 label->setPicture(myPicture);// 現(xiàn)在標簽將顯示 QPicture 對象中的繪圖內(nèi)容 // 如果之前有設(shè)置伙伴快捷鍵,它將被禁用// 如果需要獲取當前標簽上的 QPicture 對象 const QPicture *currentPicture = label->picture();// 檢查獲取的 QPicture 是否有效,并進行操作 if (currentPicture) {// QPicture 是有效的,可以進行一些操作 } else {// 標簽沒有設(shè)置 QPicture }
-
注意事項:
-
當調(diào)用
setPicture()
函數(shù)時,QLabel
之前顯示的任何內(nèi)容(無論是文本、圖像還是動畫)都會被清除,并替換為傳入的QPicture
對象的內(nèi)容。 -
如果
QLabel
之前設(shè)置了伙伴快捷鍵(通過setBuddy()
函數(shù)),則在設(shè)置新的圖片內(nèi)容后,伙伴快捷鍵將被自動禁用。
-
-
11.pixmap與setPixmap函數(shù)–設(shè)置QPixmap對象
-
pixmap函數(shù)
QPixmap QLabel::pixmap(Qt::ReturnByValueConstant) const
-
函數(shù)說明
用于獲取當前
QLabel
對象所顯示的QPixmap
對象。QPixmap
是 Qt 中用于處理圖像的類,它包含圖像數(shù)據(jù)和與圖像相關(guān)的操作。 -
參數(shù)說明:
Qt::ReturnByValueConstant
是一個枚舉值,用于指示函數(shù)應(yīng)該按值返回QPixmap
對象。這種返回方式確保了對返回的QPixmap
對象的修改不會影響到QLabel
內(nèi)部的圖像數(shù)據(jù)。
-
-
setPixmap函數(shù)
void setPixmap(const QPixmap &)
-
函數(shù)說明:
用于將
QLabel
控件的內(nèi)容設(shè)置為一個QPixmap
對象。 -
示例:
// 創(chuàng)建一個 QLabel 實例 QLabel *label = new QLabel(this);// 創(chuàng)建 QPixmap 對象,例如從文件加載圖像 QPixmap pixmap("path/to/your/image.png");// 檢查 QPixmap 是否有效 if (!pixmap.isNull()) {// 將 QPixmap 設(shè)置為 QLabel 的內(nèi)容label->setPixmap(pixmap);// 現(xiàn)在 label 將顯示加載的圖像 } else {// QPixmap 加載失敗,可以設(shè)置默認圖像或顯示錯誤信息label->setPixmap(QPixmap("path/to/default/image.png")); }// 如果需要調(diào)整圖像的顯示方式,可以使用 QLabel 的其他函數(shù) // 例如,設(shè)置圖像的縮放行為 label->setScaledContents(true); // 縮放圖像以填充整個標簽// 如果需要居中顯示圖像 label->setAlignment(Qt::AlignCenter);// 如果需要調(diào)整圖像與標簽邊緣的距離 label->setMargin(10); // 設(shè)置邊距為 10 像素
-
注意事項:
- 當調(diào)用
setPixmap()
函數(shù)時,任何之前QLabel
中顯示的內(nèi)容(文本、圖像、動畫等)都將被清除,并替換為新的QPixmap
圖像。 - 傳入的
QPixmap
對象可以是任何有效的圖像數(shù)據(jù),包括但不限于從文件加載的圖像、由應(yīng)用程序創(chuàng)建的圖像或由其他QLabel
控件傳遞的圖像。 setPixmap()
函數(shù)通過引用傳遞QPixmap
對象,這意味著它不會復(fù)制圖像數(shù)據(jù),從而節(jié)省了內(nèi)存和提高了效率。- 如果傳入的
QPixmap
是空的或包含無效的圖像數(shù)據(jù),QLabel
將不會顯示任何內(nèi)容。
- 當調(diào)用
-
12.selectionStart函數(shù)–獲取選中文本的起始索引
int QLabel::selectionStart() const
-
函數(shù)說明:
selectionStart()
用于獲取當前被選中文本的起始索引。如果沒有文本被選中,則此函數(shù)返回 -1,表示當前沒有文本選擇。 -
示例:
// 假設(shè)有一個 QLabel 實例,已經(jīng)設(shè)置了可以選中文本的 flag QLabel *label = new QLabel("This is a selectable text.", this); label->setTextInteractionFlags(Qt::TextSelectableByMouse);// 假設(shè)用戶已經(jīng)通過鼠標選擇了一些文本 // 現(xiàn)在我們想要獲取選中文本的起始索引 int selectionStartIndex = label->selectionStart();if (selectionStartIndex != -1) {// 有文本被選中,selectionStartIndex 是選中文本的起始索引QString selectedText = label->selectedText();qDebug() << "Selected text starts at index:" << selectionStartIndex;qDebug() << "Selected text:" << selectedText; } else {// 沒有文本被選中qDebug() << "No text is selected."; }
-
注意事項:
為了能夠使用文本選擇功能,
QLabel
的textInteractionFlags
屬性必須設(shè)置為包含TextSelectableByMouse
或TextSelectableByKeyboard
。這允許用戶通過鼠標或鍵盤與文本進行交互并選擇文本。
13.setSelection函數(shù)–指定文本選中的范圍
void QLabel::setSelection(int start, int length)
-
函數(shù)說明:
用于指定
QLabel
中的文本選擇范圍。 -
示例:
// 假設(shè)有一個 QLabel 實例 QLabel *label = new QLabel("Hello, this is a selectable text.", this); label->setTextInteractionFlags(Qt::TextSelectableByMouse);// 選擇 "this" 這個詞(索引從 7 開始,長度為 4) label->setSelection(7, 4);// 現(xiàn)在 "this" 這個詞將在 QLabel 中被選中 // 用戶可以通過調(diào)用 selectedText() 來獲取選中的文本 QString selectedText = label->selectedText(); qDebug() << "Selected text:" << selectedText;
-
注意事項:
為了使
QLabel
支持文本選擇,必須設(shè)置textInteractionFlags
屬性,包含TextSelectableByMouse
或TextSelectableByKeyboard
。這樣用戶才能通過鼠標或鍵盤選擇文本,或者通過代碼使用setSelection
函數(shù)來選擇文本。
14.textFormat與setTextFormat函數(shù)–標簽的文本格式
Qt::TextFormat textFormat() const
void setTextFormat(Qt::TextFormat)
-
函數(shù)說明:
- 使用
textFormat()
函數(shù)可以獲取當前的文本格式設(shè)置。 - 使用
setTextFormat(Qt::TextFormat)
函數(shù)可以設(shè)置文本的格式。例如,如果需要確保文本按純文本處理,可以顯式設(shè)置格式為Qt::PlainText
。
- 使用
-
示例:
// 創(chuàng)建一個 QLabel 實例 QLabel *label = new QLabel(this);// 設(shè)置 QLabel 顯示的文本 label->setText("<html><body><b>Rich text</b> example!</body></html>");// 通過 setTextFormat() 設(shè)置文本格式為富文本 label->setTextFormat(Qt::RichText);// 獲取當前的文本格式 Qt::TextFormat currentFormat = label->textFormat();// 檢查文本格式并據(jù)此更新界面或進行其他操作 if (currentFormat == Qt::RichText) {// 文本格式為富文本,可以包含 HTML 標簽 } else {// 文本格式為純文本 }
15.text與setText函數(shù)–設(shè)置文本
QString text() const
void setText(const QString &)
-
函數(shù)說明:
- text()函數(shù)用于獲取當前文本
- setText()函數(shù)用于設(shè)置文本
在如下示例中,setText中的參數(shù)為字符串字面量,Qt中會將這種
const char*
類型的字符串字面量隱式轉(zhuǎn)換為QString
對象。默認情況下,字符串字面量是按 ISO 8859-1 編碼的,因此,下面兩種方式等價// 隱式轉(zhuǎn)換示例 label->setText("Welcome to <b>Qt</b>!");// 等同于 label->setText(QString::fromLatin1("Welcome to <b>Qt</b>!"));
-
示例:
// 創(chuàng)建一個 QLabel 實例 QLabel *label = new QLabel(this);// 設(shè)置文本內(nèi)容 label->setText("Welcome to <b>Qt</b>!");// 獲取當前文本 QString currentText = label->text(); qDebug() << "Label text:" << currentText;// 更改文本格式為富文本 label->setTextFormat(Qt::RichText); label->setOpenExternalLinks(true); //允許外部打開鏈接 // 如果需要更新文本內(nèi)容 label->setText("Updated text with <a href='http://www.baidu.com'>link</a>.");// 再次獲取文本 currentText = label->text(); qDebug() << "Updated label text:" << currentText;
此時,點擊鏈接,會自動打開百度網(wǎng)頁。
-
注意事項:
- 通過
setText(const QString &)
可以設(shè)置QLabel
的文本內(nèi)容,這會清除之前顯示的所有內(nèi)容。 - 文本的解釋方式(純文本或富文本)取決于
setTextFormat()
函數(shù)設(shè)置的文本格式。Qt::AutoText
作為默認設(shè)置,意味著QLabel
將嘗試自動檢測文本的格式。 - 如果設(shè)置了伙伴(buddy),則在設(shè)置新文本時,伙伴的助記符鍵將根據(jù)新文本進行更新。
- 通過
16.textInteractionFlags與setTextInteractionFlags函數(shù) – 標簽文本交互標志
Qt::TextInteractionFlags textInteractionFlags() const //返回標簽的文本交互標志。
void setTextInteractionFlags(Qt::TextInteractionFlags flags) //設(shè)置標簽的文本交互標志。
-
函數(shù)說明:
-
textInteractionFlags()
函數(shù)用于獲取當前QLabel
控件的文本交互行為標志。 -
setTextInteractionFlags(Qt::TextInteractionFlags flags)
函數(shù)用于設(shè)置QLabel
控件的文本交互行為標志、鏈接是否可以被訪問等。Qt::TextInteractionFlags
是一個枚舉類型,定義了不同的文本交互行為,如文本是否可以被選擇
-
-
示例:
// 創(chuàng)建一個 QLabel 實例 QLabel *label = new QLabel("Selectable and clickable text", this);// 獲取當前的文本交互標志 Qt::TextInteractionFlags flags = label->textInteractionFlags(); qDebug() << "Current text interaction flags:" << flags;// 設(shè)置文本交互標志以允許鼠標選擇文本和鍵盤訪問鏈接 label->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAccessibleByKeyboard);// 現(xiàn)在用戶可以使用鼠標選擇文本,也可以使用鍵盤操作鏈接
17.wordWrap與setWordWrap函數(shù)–標簽文本自動換行
bool wordWrap() const // 獲取當前是否啟用自動換行
void setWordWrap(bool on) // 設(shè)置是否啟用自動換行
-
函數(shù)說明:
wordWrap屬性控制
QLabel
控件中文本的自動換行策略。默認情況下,自動換行是禁用的。- 當
wordWrap
設(shè)置為true
時,如果文本超出了標簽的寬度,它將在單詞的邊界處自動換行,以確保文本不會溢出標簽的邊界。 - 如果
wordWrap
設(shè)置為false
,則文本不會自動換行,如果文本超出了標簽的寬度,它可能會被截斷或溢出。
- 當
-
示例
// 創(chuàng)建一個 QLabel 實例 QLabel *label = new QLabel("This is a long text that might not fit in one line without word wrapping.", this);// 默認情況下 wordWrap 是禁用的,設(shè)置文本 label->setText("Text without word wrap, which may cause overflow.");// 檢查當前是否啟用了自動換行 bool isWordWrapEnabled = label->wordWrap(); qDebug() << "Is word wrap enabled?" << isWordWrapEnabled;// 啟用自動換行 label->setWordWrap(true);// 再次檢查自動換行狀態(tài),現(xiàn)在應(yīng)該是啟用狀態(tài) isWordWrapEnabled = label->wordWrap(); qDebug() << "Is word wrap enabled after setting to true?" << isWordWrapEnabled;// 更新文本,現(xiàn)在文本應(yīng)該在單詞邊界處自動換行 label->setText("Updated text that will wrap at the end of the line if it's too long.");
啟動自動換行策略后,顯示如下:
四、Reimplemented Public Functions(重載)
1.heightForWidth函數(shù)
[override virtual] int QLabel::heightForWidth(int w) const
-
函數(shù)說明:
重寫此函數(shù)允許
QLabel
提供自己的邏輯來確定其在特定寬度下的高度。heightForWidth(int w) const
是QWidget
類的一個虛函數(shù),QLabel
通過override
關(guān)鍵字重寫了這個函數(shù)。 -
示例:
// 假設(shè)有一個 QLabel 的子類,我們想要自定義它在不同寬度下的高度 class CustomLabel : public QLabel { protected:int heightForWidth(int w) const override {// 根據(jù)自定義邏輯計算高度// 例如,我們可以增加一些額外的空間來改善布局return QLabel::heightForWidth(w) + 10;} };// 在應(yīng)用程序中使用 CustomLabel CustomLabel *customLabel = new CustomLabel("Custom label text", this); // CustomLabel 的 heightForWidth 方法將在需要確定高度時被調(diào)用
-
注意事項:
重寫
heightForWidth()
函數(shù)是可選的
2.minimumSizeHint函數(shù)
[override virtual] QSize QLabel::minimumSizeHint() const
-
函數(shù)說明:
重寫
minimumSizeHint()
函數(shù)允許QLabel
根據(jù)其內(nèi)容和屬性來調(diào)整最小尺寸,確保即使在空間受限的情況下也能合理顯示。minimumSizeHint()
函數(shù)是QWidget
類的一個虛函數(shù)。 -
示例
// 假設(shè)有一個 QLabel 的子類,我們想要自定義它的最小尺寸提示 class CustomLabel : public QLabel { protected:QSize minimumSizeHint() const override {// 根據(jù)自定義邏輯計算最小尺寸// 例如,我們可以增加一些額外的空間來改善布局QSize sizeHint = QLabel::minimumSizeHint();return QSize(sizeHint.width() + 20, sizeHint.height() + 10);} };// 在應(yīng)用程序中使用 CustomLabel CustomLabel *customLabel = new CustomLabel("Custom label text", this); // CustomLabel 的 minimumSizeHint 方法將在需要確定最小尺寸時被調(diào)用
-
注意事項:
重寫
minimumSizeHint()
函數(shù)是可選的
3.sizeHint函數(shù)
[override virtual] QSize QLabel::sizeHint() const
-
函數(shù)說明:
重寫
sizeHint()
函數(shù)允許QLabel
根據(jù)其顯示的內(nèi)容和樣式屬性來調(diào)整建議的尺寸。sizeHint()
函數(shù)是QFrame
類的一個虛函數(shù) -
示例:
// 假設(shè)有一個 QLabel 的子類,我們想要自定義它建議的尺寸 class CustomLabel : public QLabel { protected:QSize sizeHint() const override {// 根據(jù)自定義邏輯計算建議的尺寸// 例如,我們可以增加一些額外的空間來改善布局QSize hint = QLabel::sizeHint();// 假設(shè)我們想要寬度至少為 200,高度至少為 100return QSize(qMax(200, hint.width()), qMax(100, hint.height()));} };// 在應(yīng)用程序中使用 CustomLabel CustomLabel *customLabel = new CustomLabel("Custom label text", this); // CustomLabel 的 sizeHint 方法將在布局管理器確定尺寸時被調(diào)用
-
注意事項:
sizeHint()
函數(shù)通常在布局管理器計算控件尺寸時被調(diào)用,以確定一個合適的尺寸。
五、Public Slots(公共槽函數(shù))
1.clear函數(shù)–清除QLabel控件中顯示的所有內(nèi)容
[Slot] void QLabel::clear()
-
函數(shù)說明:
用于清除QLabel控件中顯示的所有內(nèi)容,無論是文本還是圖標。
2.setMovie函數(shù)–設(shè)置標簽內(nèi)容為QMovie對象
void setMovie(QMovie *movie)
-
函數(shù)說明:
setMovie(QMovie *movie)
是QLabel
類的一個槽函數(shù),用于將一個QMovie
對象設(shè)置為標簽的內(nèi)容。QMovie
通常用于播放動畫圖像,如 GIF 文件。當調(diào)用setMovie()
函數(shù)時,之前標簽中顯示的任何內(nèi)容(文本、圖像等)都將被清除,并替換為指定的動畫。 -
示例
// 創(chuàng)建一個標簽和動畫對象 QLabel *label = new QLabel(this); QMovie *movie = new QMovie("path/to/your/animation.gif");// 將動畫設(shè)置到標簽上 label->setMovie(movie);// 啟動動畫播放 movie->start();// 稍后,可能需要檢查當前標簽是否有動畫,或者獲取動畫對象 QMovie *currentMovie = label->movie();if (currentMovie) {// 動畫存在,可以進行一些操作,比如暫停或刪除currentMovie->pause(); } else {// 沒有動畫 }
-
注意事項:
- 需要注意的是,
QLabel
不會接管傳入的QMovie
對象的所有權(quán)。這意味著QMovie
對象的生命周期需要由其他地方管理,QLabel
只是使用這個對象來播放動畫,并不會在內(nèi)部刪除它。 - 設(shè)置動畫后,如果之前有設(shè)置伙伴快捷鍵(通過
setBuddy()
),則該快捷鍵將被自動禁用,因為動畫播放期間可能不適用快捷鍵。
- 需要注意的是,
3.setNum函數(shù)–設(shè)置標簽內(nèi)容為傳入數(shù)值的文本表示
void setNum(double num)
void setNum(int num)
-
函數(shù)說明:
用于將QLabel控件的內(nèi)容設(shè)置為傳入數(shù)值的文本表示。如果標簽之前有內(nèi)容,這些內(nèi)容將被新的文本表示替換。如果標簽控件有設(shè)置伙伴快捷鍵,這個快捷鍵將被禁用。
4.setPicture函數(shù)–設(shè)置標簽 的內(nèi)容為QPicture對象
void setPicture(const QPicture &picture)
-
函數(shù)說明:
這是
QLabel
類的一個槽函數(shù),用于將QLabel
的內(nèi)容設(shè)置為一個QPicture
對象。 -
示例:
// 創(chuàng)建一個標簽和一個 QPicture 對象 QLabel *label = new QLabel(this); QPicture myPicture;// 假設(shè)我們通過某種方式填充了 myPicture 對象 // ...// 將 QPicture 對象設(shè)置為標簽的內(nèi)容 label->setPicture(myPicture);// 現(xiàn)在標簽將顯示 QPicture 對象中的繪圖內(nèi)容 // 如果之前有設(shè)置伙伴快捷鍵,它將被禁用// 如果需要獲取當前標簽上的 QPicture 對象 const QPicture *currentPicture = label->picture();// 檢查獲取的 QPicture 是否有效,并進行操作 if (currentPicture) {// QPicture 是有效的,可以進行一些操作 } else {// 標簽沒有設(shè)置 QPicture }
-
注意事項:
-
當調(diào)用
setPicture()
函數(shù)時,QLabel
之前顯示的任何內(nèi)容(無論是文本、圖像還是動畫)都會被清除,并替換為傳入的QPicture
對象的內(nèi)容。 -
如果
QLabel
之前設(shè)置了伙伴快捷鍵(通過setBuddy()
函數(shù)),則在設(shè)置新的圖片內(nèi)容后,伙伴快捷鍵將被自動禁用。
-
5.setPixmap函數(shù)–設(shè)置標簽控件為QPixmap對象
void setPixmap(const QPixmap &)
-
函數(shù)說明:
用于將
QLabel
控件的內(nèi)容設(shè)置為一個QPixmap
對象。 -
示例:
// 創(chuàng)建一個 QLabel 實例 QLabel *label = new QLabel(this);// 創(chuàng)建 QPixmap 對象,例如從文件加載圖像 QPixmap pixmap("path/to/your/image.png");// 檢查 QPixmap 是否有效 if (!pixmap.isNull()) {// 將 QPixmap 設(shè)置為 QLabel 的內(nèi)容label->setPixmap(pixmap);// 現(xiàn)在 label 將顯示加載的圖像 } else {// QPixmap 加載失敗,可以設(shè)置默認圖像或顯示錯誤信息label->setPixmap(QPixmap("path/to/default/image.png")); }// 如果需要調(diào)整圖像的顯示方式,可以使用 QLabel 的其他函數(shù) // 例如,設(shè)置圖像的縮放行為 label->setScaledContents(true); // 縮放圖像以填充整個標簽// 如果需要居中顯示圖像 label->setAlignment(Qt::AlignCenter);// 如果需要調(diào)整圖像與標簽邊緣的距離 label->setMargin(10); // 設(shè)置邊距為 10 像素
-
注意事項:
- 當調(diào)用
setPixmap()
函數(shù)時,任何之前QLabel
中顯示的內(nèi)容(文本、圖像、動畫等)都將被清除,并替換為新的QPixmap
圖像。 - 傳入的
QPixmap
對象可以是任何有效的圖像數(shù)據(jù),包括但不限于從文件加載的圖像、由應(yīng)用程序創(chuàng)建的圖像或由其他QLabel
控件傳遞的圖像。 setPixmap()
函數(shù)通過引用傳遞QPixmap
對象,這意味著它不會復(fù)制圖像數(shù)據(jù),從而節(jié)省了內(nèi)存和提高了效率。- 如果傳入的
QPixmap
是空的或包含無效的圖像數(shù)據(jù),QLabel
將不會顯示任何內(nèi)容。
- 當調(diào)用
6.setText函數(shù)–設(shè)置標簽控件的文本
void setText(const QString &)
-
函數(shù)說明:
setText()用于設(shè)置標簽控件的文本
-
示例:
// 創(chuàng)建一個 QLabel 實例 QLabel *label = new QLabel(this);// 設(shè)置文本內(nèi)容 label->setText("Welcome to <b>Qt</b>!");// 獲取當前文本 QString currentText = label->text(); qDebug() << "Label text:" << currentText;// 更改文本格式為富文本 label->setTextFormat(Qt::RichText); label->setOpenExternalLinks(true); // 如果需要更新文本內(nèi)容 label->setText("Updated text with <a href='http://www.baidu.com'>link</a>.");// 再次獲取文本 currentText = label->text(); qDebug() << "Updated label text:" << currentText;
此時,點擊鏈接,會自動打開百度網(wǎng)頁。
-
注意事項:
- 通過
setText(const QString &)
可以設(shè)置QLabel
的文本內(nèi)容,這會清除之前顯示的所有內(nèi)容。 - 文本的解釋方式(純文本或富文本)取決于
setTextFormat()
函數(shù)設(shè)置的文本格式。Qt::AutoText
作為默認設(shè)置,意味著QLabel
將嘗試自動檢測文本的格式。 - 如果設(shè)置了伙伴(buddy),則在設(shè)置新文本時,伙伴的助記符鍵將根據(jù)新文本進行更新。
- 通過
六、Signals(信號)
1.linkActivated信號
void linkActivated(const QString &link)
-
說明:
這是一個信號。當用戶點擊一個鏈接時,此信號被發(fā)出。傳遞給
link
參數(shù)的URL是被點擊的錨點所引用的鏈接 -
參數(shù)說明:
const QString &link
: 這是信號發(fā)出時傳遞的參數(shù),包含了被激活鏈接的文本,通常是一個URL。
-
示例:
QLabel *label = new QLabel(this); label->setText("Visit <a href='https://www.example.com'>Example</a> for more information."); label->setOpenExternalLinks(true); // 允許打開外部鏈接// 連接信號到槽函數(shù) connect(label, &QLabel::linkActivated, this, &MyWidget::onLinkActivated); }//槽函數(shù) void Widget::onLinkActivated(const QString &link) {// 打開鏈接QDesktopServices::openUrl(QUrl(link)); }
-
注意事項:
默認情況下,
openExternalLinks
的值是false
。如果設(shè)置為true
,當用戶點擊鏈接時,QLabel
將自動使用QDesktopServices::openUrl()
函數(shù)打開鏈接對應(yīng)的網(wǎng)頁或資源;如果設(shè)置為true
,發(fā)出linkActivated()
信號,用戶可以連接這個信號來自定義鏈接被激活時的行為。
2.linkHovered信號
void linkHovered(const QString &link)
-
說明:
這是一個信號,當用戶將鼠標懸停在標簽中的鏈接上時發(fā)出。此信號允許開發(fā)者響應(yīng)用戶懸停在鏈接上的行為,例如顯示一個工具提示或執(zhí)行其他自定義操作。
-
參數(shù)說明:
const QString &link
: 信號發(fā)出時傳遞的參數(shù),包含了被懸停鏈接的文本,通常是一個URL。
-
示例:
QLabel *label = new QLabel(this); label->setText("Hover over <a href='https://www.example.com'>Example</a> to see a tooltip."); label->setOpenExternalLinks(true); // 允許打開外部鏈接// 連接信號到槽函數(shù) connect(label, &QLabel::linkHovered, this, &Widget::onLinkHovered);void Widget::onLinkHovered(const QString &link) {// 顯示工具提示QToolTip::showText(QCursor::pos(), "Visit Example for more information.", this); }
七、Reimplemented Protected Functions(重載)
下面這些函數(shù)是QLabel子類中可以重寫的函數(shù)
1.changeEvent函數(shù)
virtual void changeEvent(QEvent *ev) override
-
函數(shù)說明:
它重寫了QFrame類的
changeEvent
函數(shù)。這個成員函數(shù)是Qt事件處理機制的一部分。當控件的某些屬性發(fā)生變化時,如啟用狀態(tài)、顯示狀態(tài)、文字顏色等,這個事件就會被發(fā)出。 -
參數(shù)說明:
QEvent *ev
: 函數(shù)的參數(shù)是一個指向QEvent
對象的指針,它包含了事件的信息。
2.contextMenuEvent函數(shù)–右鍵點擊上下文菜單事件
virtual void contextMenuEvent(QContextMenuEvent *ev) override
-
函數(shù)說明:
它重寫了QWidget類的
contextMenuEvent
函數(shù)。這個成員函數(shù)用于響應(yīng)右鍵點擊事件,即當用戶在控件上點擊鼠標右鍵時,會觸發(fā)上下文菜單事件。 -
參數(shù)說明:
QContextMenuEvent *ev
: 函數(shù)的參數(shù)是一個指向QContextMenuEvent
對象的指針,它包含了事件的信息,如鼠標的位置等。
-
示例:在自定義的CustomLabel中重寫菜單事件,當點擊右擊CustomLabel時,出現(xiàn)上下文菜單
//設(shè)置菜單策略 this->setContextMenuPolicy(Qt::DefaultContextMenu);//初始化菜單 m_pMenu = new QMenu(this);QAction *pAction1 = new QAction("查看"); QAction *pAction2 = new QAction("排序方式"); QAction *pAction3 = new QAction("刷新"); m_pMenu->addAction(pAction1); m_pMenu->addAction(pAction2); m_pMenu->addAction(pAction3);connect(pAction1, &QAction::triggered, [=]{QMessageBox::information(this, "title", "查看"); });//重寫上下文菜單事件--在鼠標點擊處執(zhí)行菜單 void CustomLabel ::contextMenuEvent(QContextMenuEvent* event) {m_pMenu->exec(QCursor::pos()); }
3.event函數(shù)–接收與處理所有事件
virtual bool event(QEvent *e) override
-
函數(shù)說明:
event
函數(shù)是Qt事件處理機制中的一個非常底層的函數(shù),用于接收所有事件。這個函數(shù)重寫了QFrame
類中的event
函數(shù)。 -
參數(shù)說明:
QEvent *e
: 函數(shù)的參數(shù)是一個指向QEvent
對象的指針,它包含了事件的類型和相關(guān)信息。 -
示例:
bool CustomLabel::event(QEvent *e) {// 首先調(diào)用基類的event函數(shù)bool result = QLabel::event(e);// 檢查事件類型if (e->type() == QEvent::MouseButtonDblClick) {// 處理雙擊事件qDebug("Label was double-clicked.");return true; // 事件已處理,不再傳遞}// 如果事件未被處理,返回基類的處理結(jié)果return result; }
4.focusInEvent函數(shù)-獲得焦點事件
virtual void focusInEvent(QFocusEvent *ev) override
-
函數(shù)說明:
用于響應(yīng)獲得焦點的事件。當控件獲得輸入焦點時,這個事件會被觸發(fā)。它重寫了QWidget類的
focusInEvent
函數(shù)。 -
參數(shù)說明:
QFocusEvent *ev
: 函數(shù)的參數(shù)是一個指向QFocusEvent
對象的指針,它包含了焦點事件的相關(guān)信息。
-
示例:
void CustomLabel::focusInEvent(QFocusEvent *ev) {// 調(diào)用基類的focusInEvent處理基本的焦點進入邏輯QLabel::focusInEvent(ev);// 可以在這里添加自定義的焦點進入時的處理qDebug("Label has gained focus.");// 例如,可以改變標簽的樣式或顯示效果來反映焦點狀態(tài)this->setStyleSheet("QLabel { border: 1px solid blue; }"); }
5.focusNextPrevChild函數(shù)–焦點轉(zhuǎn)移事件
virtual bool focusNextPrevChild(bool next) override
-
函數(shù)說明:
用于處理在控件之間轉(zhuǎn)移焦點的請求。當用戶通過鍵盤(如Tab鍵)在控件間導(dǎo)航時,這個函數(shù)會被調(diào)用。它重寫了QWidget類的
focusNextPrevChild
函數(shù)。 -
參數(shù)說明:
bool next
: 函數(shù)的參數(shù),指示焦點是向前移動(true
)還是向后移動(false
)。
-
返回值:
bool
: 函數(shù)的返回類型是布爾值,表示是否成功轉(zhuǎn)移焦點。如果返回true
,表示焦點轉(zhuǎn)移成功;如果返回false
,表示沒有焦點可以轉(zhuǎn)移,焦點將停留在當前控件上。
6.focusOutEvent函數(shù)–失去焦點事件
virtual void focusOutEvent(QFocusEvent *ev) override
-
函數(shù)說明:
用于響應(yīng)失去焦點的事件。當控件的輸入焦點被另一個控件獲取時,這個事件會被觸發(fā)。它重寫了QWidget類的
focusOutEvent
函數(shù)。 -
參數(shù)說明:
QFocusEvent *ev
: 函數(shù)的參數(shù)是一個指向QFocusEvent
對象的指針,它包含了焦點事件的相關(guān)信息。
-
示例:
void CustomLabel::focusOutEvent(QFocusEvent *ev) {// 調(diào)用基類的focusOutEvent處理基本的失去焦點邏輯QLabel::focusOutEvent(ev);// 可以在這里添加自定義的失去焦點時的處理qDebug("Label has lost focus.");// 例如,可以改變標簽的樣式或顯示效果來反映失去焦點狀態(tài)this->setStyleSheet(""); // 清除之前設(shè)置的樣式 }
7.keyPressEvent函數(shù) – 鍵盤按鍵事件
virtual void keyPressEvent(QKeyEvent *ev) override
-
函數(shù)說明:
用于響應(yīng)鍵盤按鍵事件。當用戶在控件上按下鍵盤上的任意鍵時,這個事件會被觸發(fā)。它重寫了QWidget類的
keyPressEvent
函數(shù)。 -
參數(shù)說明:
QKeyEvent *ev
: 函數(shù)的參數(shù)是一個指向QKeyEvent
對象的指針,它包含了鍵盤事件的詳細信息,如按下的鍵、是否同時按下了Shift或Ctrl等。
-
示例:
void CustomLabel::keyPressEvent(QKeyEvent *ev) override {// 調(diào)用基類的keyPressEvent來處理事件QLabel::keyPressEvent(ev);// 檢查按下的鍵switch (ev->key()) {case Qt::Key_Left:qDebug("Left arrow key was pressed.");break;case Qt::Key_Right:qDebug("Right arrow key was pressed.");break;// 可以根據(jù)需要添加更多的按鍵事件處理default:// 如果不是我們關(guān)心的鍵,調(diào)用基類的處理QWidget::keyPressEvent(ev);break;} }
8.mouseMoveEvent函數(shù)–鼠標移動事件
virtual void mouseMoveEvent(QMouseEvent *ev) override
-
函數(shù)說明:
用于響應(yīng)鼠標移動事件。當鼠標在控件區(qū)域內(nèi)移動時,不論是否按下了鼠標鍵,這個事件都會被觸發(fā)。它重寫了QWidget類的
mouseMoveEvent
函數(shù)。 -
參數(shù)說明:
QMouseEvent *ev
: 函數(shù)的參數(shù)是一個指向QMouseEvent
對象的指針,它包含了鼠標事件的詳細信息,如鼠標位置、哪些鼠標鍵被按下、鼠標移動的距離等。
9.mousePressEvent函數(shù)–鼠標按鍵按下事件
virtual void mousePressEvent(QMouseEvent *ev) override
-
函數(shù)說明:
用于響應(yīng)鼠標按鍵按下的事件。當用戶在控件上按下鼠標鍵時,這個事件會被觸發(fā)。它重寫了QWidget類的
mousePressEvent
函數(shù)。 -
參數(shù)說明:
QMouseEvent *ev
: 函數(shù)的參數(shù)是一個指向QMouseEvent
對象的指針,它包含了鼠標事件的詳細信息,如鼠標位置、哪個鼠標鍵被按下、點擊次數(shù)等。
-
示例:
void CustomLabel::mousePressEvent(QMouseEvent *ev) override {// 調(diào)用基類的mousePressEvent來處理基本的鼠標按下邏輯QLabel::mousePressEvent(ev);// 可以在這里添加自定義的鼠標按下時的處理qDebug() << "Mouse button was pressed at position:" << ev->pos().toString();// 例如,可以檢查按下的是哪個鼠標鍵if (ev->button() == Qt::LeftButton) {qDebug("Left mouse button was pressed.");// 可以在這里添加左鍵按下時的特定操作} else if (ev->button() == Qt::RightButton) {qDebug("Right mouse button was pressed.");// 可以在這里添加右鍵按下時的特定操作} }
10.mouseReleaseEvent函數(shù) --鼠標按鍵釋放事件
virtual void mouseReleaseEvent(QMouseEvent *ev) override
-
函數(shù)說明:
用于響應(yīng)鼠標按鍵釋放的事件。當用戶在控件上釋放鼠標鍵時,這個事件會被觸發(fā)。它重寫了 QWidget 類的
mouseReleaseEvent
函數(shù)。 -
參數(shù)說明:
QMouseEvent *ev
: 函數(shù)的參數(shù)是一個指向QMouseEvent
對象的指針,它包含了鼠標事件的詳細信息,如鼠標位置、哪個鼠標鍵被釋放、是否有其他鼠標鍵同時被按下等。
11.paintEvent函數(shù) – 控件繪制事件
virtual void paintEvent(QPaintEvent *) override
-
函數(shù)說明:
用于自定義控件的繪制過程。當控件需要重繪自身時(例如,由于大小變化、內(nèi)容更新或從隱藏變?yōu)轱@示),這個事件會被觸發(fā)。它重寫了 QFrame 類的
paintEvent
函數(shù)。 -
參數(shù)說明:
QPaintEvent *
: 函數(shù)的參數(shù)是一個指向QPaintEvent
對象的指針,它包含了繪制事件的相關(guān)信息,如需要更新的區(qū)域等。