文章目录
- 一、QLabel类介绍
- 二、Properties(属性)
- 三、Public Functions(公共函数)
- 1.构造函数
- 2.alignment与setAlignment函数 -- 标签内容的对齐方式
- 3.buddy与setBuddy函数 -- QLabel关联的伙伴控件
- 4.hasScaledContents与setScaledContents函数-- 是否自动缩放其显示的内容以适应控件的大小
- 5.hasSelectedText与selectedText函数--文本选中
- 6. indent与setIndent函数--标签文本的缩进像素值
- 7.margin与setMargin函数--边距的宽度
- 8.movie与setMovie函数 -- 标签上的动画QMovie
- 9.openExternalLinks与setOpenExternalLinks函数--控制显示外部链接
- 10.picture与setPicture函数--设置QPicture对象
- 11.pixmap与setPixmap函数--设置QPixmap对象
- 12.selectionStart函数--获取选中文本的起始索引
- 13.setSelection函数--指定文本选中的范围
- 14.textFormat与setTextFormat函数--标签的文本格式
- 15.text与setText函数--设置文本
- 16.textInteractionFlags与setTextInteractionFlags函数 -- 标签文本交互标志
- 17.wordWrap与setWordWrap函数--标签文本自动换行
- 四、Reimplemented Public Functions(重载)
- 1.heightForWidth函数
- 2.minimumSizeHint函数
- 3.sizeHint函数
- 五、Public Slots(公共槽函数)
- 1.clear函数--清除QLabel控件中显示的所有内容
- 2.setMovie函数--设置标签内容为QMovie对象
- 3.setNum函数--设置标签内容为传入数值的文本表示
- 4.setPicture函数--设置标签 的内容为QPicture对象
- 5.setPixmap函数--设置标签控件为QPixmap对象
- 6.setText函数--设置标签控件的文本
- 六、Signals(信号)
- 1.linkActivated信号
- 2.linkHovered信号
- 七、Reimplemented Protected Functions(重载)
- 1.changeEvent函数
- 2.contextMenuEvent函数--右键点击上下文菜单事件
- 3.event函数--接收与处理所有事件
- 4.focusInEvent函数-获得焦点事件
- 5.focusNextPrevChild函数--焦点转移事件
- 6.focusOutEvent函数--失去焦点事件
- 7.keyPressEvent函数 -- 键盘按键事件
- 8.mouseMoveEvent函数--鼠标移动事件
- 9.mousePressEvent函数--鼠标按键按下事件
- 10.mouseReleaseEvent函数 --鼠标按键释放事件
- 11.paintEvent函数 -- 控件绘制事件
一、QLabel类介绍
QLabel控件是一个用于显示内容的控件,可以是文本、图像、动画或数字。它不提供用户交互功能(即不提供用户输入事件的处理),但可以配置其外观和布局。QLabel可以显示纯文本或富文本,开发者需要根据需要选择合适的设置方式。可以通过设置属性来调整文本的对齐方式、换行方式等。QLabel还可以与其它控件配合使用,通过设置焦点助记符来提高用户体验,这将把键盘焦点设置到另一个控件上。
二、Properties(属性)
-
alignment : Qt::Alignment–标签内容的对齐方式
这个属性保存了标签内容的对齐方式。默认情况下,标签的内容是左对齐并且垂直居中。
这个属性的访问函数如下:
//用于获取当前标签内容的对齐方式 Qt::Alignment alignment() const //用于设置标签内容的对齐方式 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
支持文本选择,需要设置textInteractionFlags
属性,使其包含TextSelectableByMouse
或TextSelectableByKeyboard
。TextSelectableByMouse
允许用户通过鼠标选择文本,而TextSelectableByKeyboard
允许用户通过键盘选择文本。并使用hasSelectedText()
来检查是否有文本被选中,以及使用selectedText()
来获取被选中的文本。
- 为了使
-
indent : int – 标签文本的缩进像素值
这个属性保存了标签文本的缩进像素值。如果标签显示文本,缩进根据alignment()的值应用于不同的边缘:如果alignment()是Qt::AlignLeft,则应用于左边缘;如果是Qt::AlignRight,则应用于右边缘;如果是Qt::AlignTop,则应用于顶部边缘;如果是Qt::AlignBottom,则应用于底部边缘。
这个属性的访问函数为:
int indent() const // 获取当前缩进值的函数 void setIndent(int) // 设置缩进值的函数
注意事项:
- 如果
indent
属性被设置为负数,或者没有明确设置,QLabel
将自动计算有效缩进。如果frameWidth()
返回的边框宽度为0,则有效缩进为0;如果边框宽度大于0,则有效缩进为当前字体中"x"字符宽度的一半。 - 默认情况下,缩进是-1,意味着有效缩进按照上述方式计算。
- 缩进属性与
alignment
(对齐方式)、margin
(边距)、frameWidth
(框架宽度)和font
(字体)等属性相关联
- 如果
-
margin : int – 边距的宽度
这个属性保存了边距的宽度。即控件内部内容与边框之间的空间宽度。默认边距是0。
这个属性的访问函数:
int margin() const // 获取当前边距值的函数 void setMargin(int) // 设置边距值的函数
-
openExternalLinks : bool – 控件在显示链接时的行为
这个属性用来保存
QLabel
控件在显示链接时的行为。默认情况下,openExternalLinks
的值是false
。如果设置为true
,当用户点击链接时,QLabel
将自动使用QDesktopServices::openUrl()
函数打开链接对应的网页或资源;如果设置为true
,发出linkActivated()
信号,用户可以连接这个信号来自定义链接被激活时的行为。这个属性的访问函数:
bool openExternalLinks() const // 获取是否自动打开外部链接的设置 void setOpenExternalLinks(bool open) // 设置是否自动打开外部链接
注意事项:
- 为了使
QLabel
能够识别和响应链接点击事件,需要设置textInteractionFlags
属性,使其包含LinksAccessibleByMouse
或LinksAccessibleByKeyboard
。LinksAccessibleByMouse
允许用户通过鼠标点击链接,而LinksAccessibleByKeyboard
允许用户通过键盘操作选择和激活链接。
- 为了使
-
pixmap : QPixmap – 控件当前显示的图像
这个属性用于保存
QLabel
控件当前显示的图像(pixmap)。这个属性的访问方法:
QPixmap pixmap(Qt::ReturnByValueConstant) const // 按值获取图像的函数 void setPixmap(const QPixmap &) // 设置图像的函数
注意事项:
- 通过
setPixmap(const QPixmap &)
函数设置图像时,会清除QLabel
控件之前显示的所有内容,包括文本和之前设置的图像。同时,如果之前有设置快捷键伙伴(buddy shortcut),也会被禁用。
- 通过
-
scaledContents : bool – 是否自动缩放其显示的内容以适应控件的大小
这个属性用于控制
QLabel
控件是否自动缩放其显示的内容(如图像或文本)以适应控件的大小。默认情况下,scaledContents
是false
,这意味着内容不会自动缩放来填充控件空间,而是保持其原始尺寸。当scaledContents
设置为true
时,如果QLabel
正在显示一个图像(pixmap),这个图像会被缩放以填充控件的所有可用空间。这可以确保图像完全适合控件的尺寸,但可能会导致图像失真。这个属性的访问函数:
bool hasScaledContents() const // 检查是否启用了内容缩放的函数 void setScaledContents(bool) // 设置是否缩放内容以填充空间的函数
-
selectedText : const QString – 控件中当前被用户选中的文本
这个属性保存了
QLabel
控件中当前被用户选中的文本。默认情况下,selectedText
属性是空的,表示没有文本被选中这个属性的访问函数:
QString selectedText() const // 获取当前选中文本的函数
注意事项:
- 为了使
QLabel
支持文本选择,需要设置textInteractionFlags
属性,使其包含TextSelectableByMouse
或TextSelectableByKeyboard
。TextSelectableByMouse
允许通过鼠标选择文本,而TextSelectableByKeyboard
允许通过键盘选择文本。
- 为了使
-
text : QString – 标签的文本
这个属性保存了标签的文本。如果没有设置文本,将返回一个空字符串。设置文本会清除任何之前的内容。
这个属性的访问函数:
QString text() const // 获取当前文本的函数 void setText(const QString &) // 设置文本的函数
注意事项:
QLabel
适合显示小型富文本文档,这些文档的字体、文本颜色和链接颜色等设置可以从标签的调色板和字体属性中获取。对于较大的文档,建议使用只读模式的QTextEdit
控件,因为它可以提供滚动条等额外功能。
-
textFormat : Qt::TextFormat – 标签的文本样式
这个属性保存了标签的文本格式。默认格式是 Qt::AutoText,这意味着
QLabel
将尝试自动检测文本的格式,根据输入内容决定是将其显示为纯文本还是富文本。这个属性的访问函数:
Qt::TextFormat textFormat() const // 获取当前文本格式的函数 void setTextFormat(Qt::TextFormat) // 设置文本格式的函数
-
textInteractionFlags : Qt::TextInteractionFlags – 控件在显示文本时应如何响应用户的输入操作
这个属性保存了
QLabel
控件在显示文本时应如何响应用户的输入操作。这个属性影响用户如何与标签中的文本进行交互,例如,是否可以通过鼠标或键盘选择文本,或者是否可以使用键盘操作链接。这个属性的访问函数:
Qt::TextInteractionFlags textInteractionFlags() const // 获取当前文本交互标志的函数 void setTextInteractionFlags(Qt::TextInteractionFlags flags) // 设置文本交互标志的函数
-
wordWrap : bool – 标签的自动换行策略
这个属性保存了
QLabel
控件中文本的自动换行策略。默认情况下,自动换行是禁用的。- 当
wordWrap
设置为true
时,如果文本超出了标签的宽度,它将在单词的边界处自动换行,以确保文本不会溢出标签的边界。 - 如果
wordWrap
设置为false
,则文本不会自动换行,如果文本超出了标签的宽度,它可能会被截断或溢出。
这个属性的访问函数:
bool wordWrap() const // 获取当前是否启用自动换行的函数 void setWordWrap(bool on) // 设置是否启用自动换行的函数
- 当
三、Public Functions(公共函数)
1.构造函数
-
构造一个显示文本的标签
QLabel::QLabel(const QString &text, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
-
函数说明:
这是
QLabel
类的构造函数之一,用于初始化一个QLabel
对象,使其能够显示指定的文本。 -
参数说明:
const QString &text
表示标签将要显示的文本内容。QWidget *parent
是新创建的标签的父控件,控件通常通过父/子关系组织,子控件通常在父控件内部显示。如果parent
参数是nullptr
,那么QLabel
将作为一个独立的窗口被创建。Qt::WindowFlags f
是用于定义窗口属性的标志。如是否可调整大小、是否可最小化等。这些标志将传递给QFrame
的构造函数,因为QLabel
继承自QFrame
。
-
示例:
// 创建一个带有文本的标签,作为某个父窗口的子控件 QLabel *myLabel = new QLabel("Hello, World!", myParentWidget);// 创建一个顶级窗口的标签,显示不同的文本 QLabel *topLevelLabel = new QLabel("I am a top-level window", nullptr);
-
-
构造一个空标签
QLabel::QLabel(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
-
函数说明:
用于创建一个不包含任何文本或图像的空
QLabel
对象。 -
示例:
// 创建一个空的标签作为某个父控件的子控件 QWidget *myWidget = new QWidget; QLabel *myLabel = new QLabel(myWidget); // 后续设置标签的文本 myLabel->setText("Welcome to my application!");
-
2.alignment与setAlignment函数 – 标签内容的对齐方式
//用于获取当前标签内容的对齐方式
Qt::Alignment alignment() const
//用于设置标签内容的对齐方式
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函数 – QLabel关联的伙伴控件
-
buddy函数
QWidget *QLabel::buddy() const
-
函数说明:
用于获取与
QLabel
关联的伙伴(buddy)控件。如果没有设置伙伴控件,buddy()
函数将返回nullptr
。伙伴控件通常是与标签相邻的可交互控件,如QLineEdit
、QComboBox
等。当用户激活标签上的助记符时,焦点将自动转移到伙伴控件上。伙伴机制是Qt中实现用户界面便捷访问的一种方式,特别是通过键盘快捷方式快速定位。
-
-
setBuddy函数
void QLabel::setBuddy(QWidget *buddy)
-
函数说明:
用于为
QLabel
设置一个伙伴控件。当设置了伙伴控件后,如果用户按下标签文本中通过和号(&)指定的快捷键,键盘焦点会自动转移到伙伴控件上。例如,如果标签文本是 “&Name:”,则按下 Alt+N 会将焦点移动到伙伴控件。如果需要取消已经设置的伙伴,可以通过传递nullptr
给setBuddy
函数来实现。 -
示例:
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);
将其设置布局,当用户在窗口中按下 Alt+N 时,焦点会自动跳转到 nameEdit;当用户按下 Alt+P 时,焦点会自动跳转到 phoneEdit。
-
4.hasScaledContents与setScaledContents函数-- 是否自动缩放其显示的内容以适应控件的大小
bool hasScaledContents() const // 检查是否启用了内容缩放的函数
void setScaledContents(bool) // 设置是否缩放内容以填充空间的函数
-
函数说明
用于控制
QLabel
控件是否自动缩放其显示的内容(如图像或文本)以适应控件的大小。默认情况下,scaledContents
是false
,这意味着内容不会自动缩放来填充控件空间,而是保持其原始尺寸。当scaledContents
设置为true
时,如果QLabel
正在显示一个图像(pixmap),这个图像会被缩放以填充控件的所有可用空间。这可以确保图像完全适合控件的尺寸,但可能会导致图像失真。
5.hasSelectedText与selectedText函数–文本选中
bool hasSelectedText() const //标签中文本是否被选中
QString selectedText() const // 获取当前选中文本的函数
-
函数说明:
-
hasSelectedText()函数用于检查是否有文本被用户选中,如果有,则返回
true
,否则返回false
。默认情况下,没有文本被选中,因此属性的值是false
。 -
selectedText()函数用于获取
QLabel
控件中当前被用户选中的文本。
-
-
注意事项:
- 为了使
QLabel
支持文本选择,需要设置textInteractionFlags
属性,使其包含TextSelectableByMouse
或TextSelectableByKeyboard
。TextSelectableByMouse
允许用户通过鼠标选择文本,而TextSelectableByKeyboard
允许用户通过键盘选择文本。并使用hasSelectedText()
来检查是否有文本被选中,以及使用selectedText()
来获取被选中的文本。
- 为了使
6. indent与setIndent函数–标签文本的缩进像素值
int indent() const // 获取当前缩进值的函数
void setIndent(int) // 设置缩进值的函数
-
函数说明:
- indent()函数用于获取当前缩进值
- setIndent()函数用于设置缩进值
-
注意事项:
-
如果标签显示文本,缩进根据alignment()的值应用于不同的边缘:如果alignment()是Qt::AlignLeft,则应用于左边缘;如果是Qt::AlignRight,则应用于右边缘;如果是Qt::AlignTop,则应用于顶部边缘;如果是Qt::AlignBottom,则应用于底部边缘。
-
如果
indent
属性被设置为负数,或者没有明确设置,QLabel
将自动计算有效缩进。如果frameWidth()
返回的边框宽度为0,则有效缩进为0;如果边框宽度大于0,则有效缩进为当前字体中"x"字符宽度的一半。 -
默认情况下,缩进是-1,意味着有效缩进按照上述方式计算。
-
缩进属性与
alignment
(对齐方式)、margin
(边距)、frameWidth
(框架宽度)和font
(字体)等属性相关联
-
7.margin与setMargin函数–边距的宽度
int margin() const // 获取当前边距值的函数
void setMargin(int) // 设置边距值的函数
-
函数说明:
-
margin()函数用于获取当前边距值。即控件内部内容与边框之间的空间宽度。默认边距是0。
-
setMargin()函数用于设置边距值
-
8.movie与setMovie函数 – 标签上的动画QMovie
-
movie函数
QMovie *QLabel::movie() const
-
函数说明:
用于获取当前在标签上设置的
QMovie
对象的指针。QMovie
类用于加载和播放动画,通常是 .gif 格式的动画。- 如果
QLabel
使用setMovie(QMovie *)
成功设置了动画,movie()
将返回该动画对象的指针。 - 如果没有为标签设置动画,或者之前设置的动画已经被删除或停止,
movie()
将返回nullptr
。
- 如果
-
-
setMovie函数
[slot] void QLabel::setMovie(QMovie *movie)
-
函数说明:
setMovie(QMovie *movie)
是QLabel
类的一个槽函数,用于将一个QMovie
对象设置为标签的内容。QMovie
通常用于播放动画图像,如 GIF 文件。当调用setMovie()
函数时,之前标签中显示的任何内容(文本、图像等)都将被清除,并替换为指定的动画。 -
示例
// 创建一个标签和动画对象 QLabel *label = new QLabel(this); QMovie *movie = new QMovie("path/to/your/animation.gif");// 将动画设置到标签上 label->setMovie(movie);// 启动动画播放 movie->start();// 稍后,可能需要检查当前标签是否有动画,或者获取动画对象 QMovie *currentMovie = label->movie();if (currentMovie) {// 动画存在,可以进行一些操作,比如暂停或删除currentMovie->pause(); } else {// 没有动画 }
-
注意事项:
- 需要注意的是,
QLabel
不会接管传入的QMovie
对象的所有权。这意味着QMovie
对象的生命周期需要由其他地方管理,QLabel
只是使用这个对象来播放动画,并不会在内部删除它。 - 设置动画后,如果之前有设置伙伴快捷键(通过
setBuddy()
),则该快捷键将被自动禁用,因为动画播放期间可能不适用快捷键。
- 需要注意的是,
-
9.openExternalLinks与setOpenExternalLinks函数–控制显示外部链接
bool openExternalLinks() const // 获取是否自动打开外部链接的设置
void setOpenExternalLinks(bool open) // 设置是否自动打开外部链接
-
函数说明:
-
openExternalLinks()函数用于获取openExternalLinks属性的值
-
setOpenExternalLinks()函数用于设置openExternalLinks属性的值
这个属性用来保存
QLabel
控件在显示链接时的行为。默认情况下,openExternalLinks
的值是false
。如果设置为true
,当用户点击链接时,QLabel
将自动使用QDesktopServices::openUrl()
函数打开链接对应的网页或资源;如果设置为true
,发出linkActivated()
信号,用户可以连接这个信号来自定义链接被激活时的行为。
-
-
示例:
// 假设有一个 QLabel 实例 QLabel *linkLabel = new QLabel(this);// 设置 QLabel 显示的文本,包含一个链接 linkLabel->setText("Visit our <a href='https://www.example.com'>website</a>.");// 连接 linkActivated 信号以便在用户点击链接时执行自定义操作 connect(linkLabel, &QLabel::linkActivated, this, &MyClass::onLinkActivated);// 设置 QLabel 属性,自动打开链接而不是发出信号 linkLabel->setOpenExternalLinks(true);// 以下是 MyClass 中定义的槽函数,用于处理链接点击事件 void MyClass::onLinkActivated(const QString &link) {qDebug() << "Link activated:" << link;// 可以在这里添加自定义代码,比如打开一个新的浏览器窗口 }// 如果希望手动处理链接点击事件而不是自动打开链接,可以设置为 false linkLabel->setOpenExternalLinks(false);
-
注意事项:
- 为了使
QLabel
能够识别和响应链接点击事件,需要设置textInteractionFlags
属性,使其包含LinksAccessibleByMouse
或LinksAccessibleByKeyboard
。LinksAccessibleByMouse
允许用户通过鼠标点击链接,而LinksAccessibleByKeyboard
允许用户通过键盘操作选择和激活链接。
- 为了使
10.picture与setPicture函数–设置QPicture对象
-
picture函数
const QPicture *QLabel::picture() const
-
函数说明:
用于获取与标签关联的
QPicture
对象的指针。此函数已被标记为过时,不建议使用
-
-
setPicture函数
[slot] void QLabel::setPicture(const QPicture &picture)
-
函数说明:
这是
QLabel
类的一个槽函数,用于将QLabel
的内容设置为一个QPicture
对象。 -
示例:
// 创建一个标签和一个 QPicture 对象 QLabel *label = new QLabel(this); QPicture myPicture;// 假设我们通过某种方式填充了 myPicture 对象 // ...// 将 QPicture 对象设置为标签的内容 label->setPicture(myPicture);// 现在标签将显示 QPicture 对象中的绘图内容 // 如果之前有设置伙伴快捷键,它将被禁用// 如果需要获取当前标签上的 QPicture 对象 const QPicture *currentPicture = label->picture();// 检查获取的 QPicture 是否有效,并进行操作 if (currentPicture) {// QPicture 是有效的,可以进行一些操作 } else {// 标签没有设置 QPicture }
-
注意事项:
-
当调用
setPicture()
函数时,QLabel
之前显示的任何内容(无论是文本、图像还是动画)都会被清除,并替换为传入的QPicture
对象的内容。 -
如果
QLabel
之前设置了伙伴快捷键(通过setBuddy()
函数),则在设置新的图片内容后,伙伴快捷键将被自动禁用。
-
-
11.pixmap与setPixmap函数–设置QPixmap对象
-
pixmap函数
QPixmap QLabel::pixmap(Qt::ReturnByValueConstant) const
-
函数说明
用于获取当前
QLabel
对象所显示的QPixmap
对象。QPixmap
是 Qt 中用于处理图像的类,它包含图像数据和与图像相关的操作。 -
参数说明:
Qt::ReturnByValueConstant
是一个枚举值,用于指示函数应该按值返回QPixmap
对象。这种返回方式确保了对返回的QPixmap
对象的修改不会影响到QLabel
内部的图像数据。
-
-
setPixmap函数
void setPixmap(const QPixmap &)
-
函数说明:
用于将
QLabel
控件的内容设置为一个QPixmap
对象。 -
示例:
// 创建一个 QLabel 实例 QLabel *label = new QLabel(this);// 创建 QPixmap 对象,例如从文件加载图像 QPixmap pixmap("path/to/your/image.png");// 检查 QPixmap 是否有效 if (!pixmap.isNull()) {// 将 QPixmap 设置为 QLabel 的内容label->setPixmap(pixmap);// 现在 label 将显示加载的图像 } else {// QPixmap 加载失败,可以设置默认图像或显示错误信息label->setPixmap(QPixmap("path/to/default/image.png")); }// 如果需要调整图像的显示方式,可以使用 QLabel 的其他函数 // 例如,设置图像的缩放行为 label->setScaledContents(true); // 缩放图像以填充整个标签// 如果需要居中显示图像 label->setAlignment(Qt::AlignCenter);// 如果需要调整图像与标签边缘的距离 label->setMargin(10); // 设置边距为 10 像素
-
注意事项:
- 当调用
setPixmap()
函数时,任何之前QLabel
中显示的内容(文本、图像、动画等)都将被清除,并替换为新的QPixmap
图像。 - 传入的
QPixmap
对象可以是任何有效的图像数据,包括但不限于从文件加载的图像、由应用程序创建的图像或由其他QLabel
控件传递的图像。 setPixmap()
函数通过引用传递QPixmap
对象,这意味着它不会复制图像数据,从而节省了内存和提高了效率。- 如果传入的
QPixmap
是空的或包含无效的图像数据,QLabel
将不会显示任何内容。
- 当调用
-
12.selectionStart函数–获取选中文本的起始索引
int QLabel::selectionStart() const
-
函数说明:
selectionStart()
用于获取当前被选中文本的起始索引。如果没有文本被选中,则此函数返回 -1,表示当前没有文本选择。 -
示例:
// 假设有一个 QLabel 实例,已经设置了可以选中文本的 flag QLabel *label = new QLabel("This is a selectable text.", this); label->setTextInteractionFlags(Qt::TextSelectableByMouse);// 假设用户已经通过鼠标选择了一些文本 // 现在我们想要获取选中文本的起始索引 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
属性必须设置为包含TextSelectableByMouse
或TextSelectableByKeyboard
。这允许用户通过鼠标或键盘与文本进行交互并选择文本。
13.setSelection函数–指定文本选中的范围
void QLabel::setSelection(int start, int length)
-
函数说明:
用于指定
QLabel
中的文本选择范围。 -
示例:
// 假设有一个 QLabel 实例 QLabel *label = new QLabel("Hello, this is a selectable text.", this); label->setTextInteractionFlags(Qt::TextSelectableByMouse);// 选择 "this" 这个词(索引从 7 开始,长度为 4) label->setSelection(7, 4);// 现在 "this" 这个词将在 QLabel 中被选中 // 用户可以通过调用 selectedText() 来获取选中的文本 QString selectedText = label->selectedText(); qDebug() << "Selected text:" << selectedText;
-
注意事项:
为了使
QLabel
支持文本选择,必须设置textInteractionFlags
属性,包含TextSelectableByMouse
或TextSelectableByKeyboard
。这样用户才能通过鼠标或键盘选择文本,或者通过代码使用setSelection
函数来选择文本。
14.textFormat与setTextFormat函数–标签的文本格式
Qt::TextFormat textFormat() const
void setTextFormat(Qt::TextFormat)
-
函数说明:
- 使用
textFormat()
函数可以获取当前的文本格式设置。 - 使用
setTextFormat(Qt::TextFormat)
函数可以设置文本的格式。例如,如果需要确保文本按纯文本处理,可以显式设置格式为Qt::PlainText
。
- 使用
-
示例:
// 创建一个 QLabel 实例 QLabel *label = new QLabel(this);// 设置 QLabel 显示的文本 label->setText("<html><body><b>Rich text</b> example!</body></html>");// 通过 setTextFormat() 设置文本格式为富文本 label->setTextFormat(Qt::RichText);// 获取当前的文本格式 Qt::TextFormat currentFormat = label->textFormat();// 检查文本格式并据此更新界面或进行其他操作 if (currentFormat == Qt::RichText) {// 文本格式为富文本,可以包含 HTML 标签 } else {// 文本格式为纯文本 }
15.text与setText函数–设置文本
QString text() const
void setText(const QString &)
-
函数说明:
- text()函数用于获取当前文本
- setText()函数用于设置文本
在如下示例中,setText中的参数为字符串字面量,Qt中会将这种
const char*
类型的字符串字面量隐式转换为QString
对象。默认情况下,字符串字面量是按 ISO 8859-1 编码的,因此,下面两种方式等价// 隐式转换示例 label->setText("Welcome to <b>Qt</b>!");// 等同于 label->setText(QString::fromLatin1("Welcome to <b>Qt</b>!"));
-
示例:
// 创建一个 QLabel 实例 QLabel *label = new QLabel(this);// 设置文本内容 label->setText("Welcome to <b>Qt</b>!");// 获取当前文本 QString currentText = label->text(); qDebug() << "Label text:" << currentText;// 更改文本格式为富文本 label->setTextFormat(Qt::RichText); label->setOpenExternalLinks(true); //允许外部打开链接 // 如果需要更新文本内容 label->setText("Updated text with <a href='http://www.baidu.com'>link</a>.");// 再次获取文本 currentText = label->text(); qDebug() << "Updated label text:" << currentText;
此时,点击链接,会自动打开百度网页。
-
注意事项:
- 通过
setText(const QString &)
可以设置QLabel
的文本内容,这会清除之前显示的所有内容。 - 文本的解释方式(纯文本或富文本)取决于
setTextFormat()
函数设置的文本格式。Qt::AutoText
作为默认设置,意味着QLabel
将尝试自动检测文本的格式。 - 如果设置了伙伴(buddy),则在设置新文本时,伙伴的助记符键将根据新文本进行更新。
- 通过
16.textInteractionFlags与setTextInteractionFlags函数 – 标签文本交互标志
Qt::TextInteractionFlags textInteractionFlags() const //返回标签的文本交互标志。
void setTextInteractionFlags(Qt::TextInteractionFlags flags) //设置标签的文本交互标志。
-
函数说明:
-
textInteractionFlags()
函数用于获取当前QLabel
控件的文本交互行为标志。 -
setTextInteractionFlags(Qt::TextInteractionFlags flags)
函数用于设置QLabel
控件的文本交互行为标志、链接是否可以被访问等。Qt::TextInteractionFlags
是一个枚举类型,定义了不同的文本交互行为,如文本是否可以被选择
-
-
示例:
// 创建一个 QLabel 实例 QLabel *label = new QLabel("Selectable and clickable text", this);// 获取当前的文本交互标志 Qt::TextInteractionFlags flags = label->textInteractionFlags(); qDebug() << "Current text interaction flags:" << flags;// 设置文本交互标志以允许鼠标选择文本和键盘访问链接 label->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAccessibleByKeyboard);// 现在用户可以使用鼠标选择文本,也可以使用键盘操作链接
17.wordWrap与setWordWrap函数–标签文本自动换行
bool wordWrap() const // 获取当前是否启用自动换行
void setWordWrap(bool on) // 设置是否启用自动换行
-
函数说明:
wordWrap属性控制
QLabel
控件中文本的自动换行策略。默认情况下,自动换行是禁用的。- 当
wordWrap
设置为true
时,如果文本超出了标签的宽度,它将在单词的边界处自动换行,以确保文本不会溢出标签的边界。 - 如果
wordWrap
设置为false
,则文本不会自动换行,如果文本超出了标签的宽度,它可能会被截断或溢出。
- 当
-
示例
// 创建一个 QLabel 实例 QLabel *label = new QLabel("This is a long text that might not fit in one line without word wrapping.", this);// 默认情况下 wordWrap 是禁用的,设置文本 label->setText("Text without word wrap, which may cause overflow.");// 检查当前是否启用了自动换行 bool isWordWrapEnabled = label->wordWrap(); qDebug() << "Is word wrap enabled?" << isWordWrapEnabled;// 启用自动换行 label->setWordWrap(true);// 再次检查自动换行状态,现在应该是启用状态 isWordWrapEnabled = label->wordWrap(); qDebug() << "Is word wrap enabled after setting to true?" << isWordWrapEnabled;// 更新文本,现在文本应该在单词边界处自动换行 label->setText("Updated text that will wrap at the end of the line if it's too long.");
启动自动换行策略后,显示如下:
四、Reimplemented Public Functions(重载)
1.heightForWidth函数
[override virtual] int QLabel::heightForWidth(int w) const
-
函数说明:
重写此函数允许
QLabel
提供自己的逻辑来确定其在特定宽度下的高度。heightForWidth(int w) const
是QWidget
类的一个虚函数,QLabel
通过override
关键字重写了这个函数。 -
示例:
// 假设有一个 QLabel 的子类,我们想要自定义它在不同宽度下的高度 class CustomLabel : public QLabel { protected:int heightForWidth(int w) const override {// 根据自定义逻辑计算高度// 例如,我们可以增加一些额外的空间来改善布局return QLabel::heightForWidth(w) + 10;} };// 在应用程序中使用 CustomLabel CustomLabel *customLabel = new CustomLabel("Custom label text", this); // CustomLabel 的 heightForWidth 方法将在需要确定高度时被调用
-
注意事项:
重写
heightForWidth()
函数是可选的
2.minimumSizeHint函数
[override virtual] QSize QLabel::minimumSizeHint() const
-
函数说明:
重写
minimumSizeHint()
函数允许QLabel
根据其内容和属性来调整最小尺寸,确保即使在空间受限的情况下也能合理显示。minimumSizeHint()
函数是QWidget
类的一个虚函数。 -
示例
// 假设有一个 QLabel 的子类,我们想要自定义它的最小尺寸提示 class CustomLabel : public QLabel { protected:QSize minimumSizeHint() const override {// 根据自定义逻辑计算最小尺寸// 例如,我们可以增加一些额外的空间来改善布局QSize sizeHint = QLabel::minimumSizeHint();return QSize(sizeHint.width() + 20, sizeHint.height() + 10);} };// 在应用程序中使用 CustomLabel CustomLabel *customLabel = new CustomLabel("Custom label text", this); // CustomLabel 的 minimumSizeHint 方法将在需要确定最小尺寸时被调用
-
注意事项:
重写
minimumSizeHint()
函数是可选的
3.sizeHint函数
[override virtual] QSize QLabel::sizeHint() const
-
函数说明:
重写
sizeHint()
函数允许QLabel
根据其显示的内容和样式属性来调整建议的尺寸。sizeHint()
函数是QFrame
类的一个虚函数 -
示例:
// 假设有一个 QLabel 的子类,我们想要自定义它建议的尺寸 class CustomLabel : public QLabel { protected:QSize sizeHint() const override {// 根据自定义逻辑计算建议的尺寸// 例如,我们可以增加一些额外的空间来改善布局QSize hint = QLabel::sizeHint();// 假设我们想要宽度至少为 200,高度至少为 100return QSize(qMax(200, hint.width()), qMax(100, hint.height()));} };// 在应用程序中使用 CustomLabel CustomLabel *customLabel = new CustomLabel("Custom label text", this); // CustomLabel 的 sizeHint 方法将在布局管理器确定尺寸时被调用
-
注意事项:
sizeHint()
函数通常在布局管理器计算控件尺寸时被调用,以确定一个合适的尺寸。
五、Public Slots(公共槽函数)
1.clear函数–清除QLabel控件中显示的所有内容
[Slot] void QLabel::clear()
-
函数说明:
用于清除QLabel控件中显示的所有内容,无论是文本还是图标。
2.setMovie函数–设置标签内容为QMovie对象
void setMovie(QMovie *movie)
-
函数说明:
setMovie(QMovie *movie)
是QLabel
类的一个槽函数,用于将一个QMovie
对象设置为标签的内容。QMovie
通常用于播放动画图像,如 GIF 文件。当调用setMovie()
函数时,之前标签中显示的任何内容(文本、图像等)都将被清除,并替换为指定的动画。 -
示例
// 创建一个标签和动画对象 QLabel *label = new QLabel(this); QMovie *movie = new QMovie("path/to/your/animation.gif");// 将动画设置到标签上 label->setMovie(movie);// 启动动画播放 movie->start();// 稍后,可能需要检查当前标签是否有动画,或者获取动画对象 QMovie *currentMovie = label->movie();if (currentMovie) {// 动画存在,可以进行一些操作,比如暂停或删除currentMovie->pause(); } else {// 没有动画 }
-
注意事项:
- 需要注意的是,
QLabel
不会接管传入的QMovie
对象的所有权。这意味着QMovie
对象的生命周期需要由其他地方管理,QLabel
只是使用这个对象来播放动画,并不会在内部删除它。 - 设置动画后,如果之前有设置伙伴快捷键(通过
setBuddy()
),则该快捷键将被自动禁用,因为动画播放期间可能不适用快捷键。
- 需要注意的是,
3.setNum函数–设置标签内容为传入数值的文本表示
void setNum(double num)
void setNum(int num)
-
函数说明:
用于将QLabel控件的内容设置为传入数值的文本表示。如果标签之前有内容,这些内容将被新的文本表示替换。如果标签控件有设置伙伴快捷键,这个快捷键将被禁用。
4.setPicture函数–设置标签 的内容为QPicture对象
void setPicture(const QPicture &picture)
-
函数说明:
这是
QLabel
类的一个槽函数,用于将QLabel
的内容设置为一个QPicture
对象。 -
示例:
// 创建一个标签和一个 QPicture 对象 QLabel *label = new QLabel(this); QPicture myPicture;// 假设我们通过某种方式填充了 myPicture 对象 // ...// 将 QPicture 对象设置为标签的内容 label->setPicture(myPicture);// 现在标签将显示 QPicture 对象中的绘图内容 // 如果之前有设置伙伴快捷键,它将被禁用// 如果需要获取当前标签上的 QPicture 对象 const QPicture *currentPicture = label->picture();// 检查获取的 QPicture 是否有效,并进行操作 if (currentPicture) {// QPicture 是有效的,可以进行一些操作 } else {// 标签没有设置 QPicture }
-
注意事项:
-
当调用
setPicture()
函数时,QLabel
之前显示的任何内容(无论是文本、图像还是动画)都会被清除,并替换为传入的QPicture
对象的内容。 -
如果
QLabel
之前设置了伙伴快捷键(通过setBuddy()
函数),则在设置新的图片内容后,伙伴快捷键将被自动禁用。
-
5.setPixmap函数–设置标签控件为QPixmap对象
void setPixmap(const QPixmap &)
-
函数说明:
用于将
QLabel
控件的内容设置为一个QPixmap
对象。 -
示例:
// 创建一个 QLabel 实例 QLabel *label = new QLabel(this);// 创建 QPixmap 对象,例如从文件加载图像 QPixmap pixmap("path/to/your/image.png");// 检查 QPixmap 是否有效 if (!pixmap.isNull()) {// 将 QPixmap 设置为 QLabel 的内容label->setPixmap(pixmap);// 现在 label 将显示加载的图像 } else {// QPixmap 加载失败,可以设置默认图像或显示错误信息label->setPixmap(QPixmap("path/to/default/image.png")); }// 如果需要调整图像的显示方式,可以使用 QLabel 的其他函数 // 例如,设置图像的缩放行为 label->setScaledContents(true); // 缩放图像以填充整个标签// 如果需要居中显示图像 label->setAlignment(Qt::AlignCenter);// 如果需要调整图像与标签边缘的距离 label->setMargin(10); // 设置边距为 10 像素
-
注意事项:
- 当调用
setPixmap()
函数时,任何之前QLabel
中显示的内容(文本、图像、动画等)都将被清除,并替换为新的QPixmap
图像。 - 传入的
QPixmap
对象可以是任何有效的图像数据,包括但不限于从文件加载的图像、由应用程序创建的图像或由其他QLabel
控件传递的图像。 setPixmap()
函数通过引用传递QPixmap
对象,这意味着它不会复制图像数据,从而节省了内存和提高了效率。- 如果传入的
QPixmap
是空的或包含无效的图像数据,QLabel
将不会显示任何内容。
- 当调用
6.setText函数–设置标签控件的文本
void setText(const QString &)
-
函数说明:
setText()用于设置标签控件的文本
-
示例:
// 创建一个 QLabel 实例 QLabel *label = new QLabel(this);// 设置文本内容 label->setText("Welcome to <b>Qt</b>!");// 获取当前文本 QString currentText = label->text(); qDebug() << "Label text:" << currentText;// 更改文本格式为富文本 label->setTextFormat(Qt::RichText); label->setOpenExternalLinks(true); // 如果需要更新文本内容 label->setText("Updated text with <a href='http://www.baidu.com'>link</a>.");// 再次获取文本 currentText = label->text(); qDebug() << "Updated label text:" << currentText;
此时,点击链接,会自动打开百度网页。
-
注意事项:
- 通过
setText(const QString &)
可以设置QLabel
的文本内容,这会清除之前显示的所有内容。 - 文本的解释方式(纯文本或富文本)取决于
setTextFormat()
函数设置的文本格式。Qt::AutoText
作为默认设置,意味着QLabel
将尝试自动检测文本的格式。 - 如果设置了伙伴(buddy),则在设置新文本时,伙伴的助记符键将根据新文本进行更新。
- 通过
六、Signals(信号)
1.linkActivated信号
void linkActivated(const QString &link)
-
说明:
这是一个信号。当用户点击一个链接时,此信号被发出。传递给
link
参数的URL是被点击的锚点所引用的链接 -
参数说明:
const QString &link
: 这是信号发出时传递的参数,包含了被激活链接的文本,通常是一个URL。
-
示例:
QLabel *label = new QLabel(this); label->setText("Visit <a href='https://www.example.com'>Example</a> for more information."); label->setOpenExternalLinks(true); // 允许打开外部链接// 连接信号到槽函数 connect(label, &QLabel::linkActivated, this, &MyWidget::onLinkActivated); }//槽函数 void Widget::onLinkActivated(const QString &link) {// 打开链接QDesktopServices::openUrl(QUrl(link)); }
-
注意事项:
默认情况下,
openExternalLinks
的值是false
。如果设置为true
,当用户点击链接时,QLabel
将自动使用QDesktopServices::openUrl()
函数打开链接对应的网页或资源;如果设置为true
,发出linkActivated()
信号,用户可以连接这个信号来自定义链接被激活时的行为。
2.linkHovered信号
void linkHovered(const QString &link)
-
说明:
这是一个信号,当用户将鼠标悬停在标签中的链接上时发出。此信号允许开发者响应用户悬停在链接上的行为,例如显示一个工具提示或执行其他自定义操作。
-
参数说明:
const QString &link
: 信号发出时传递的参数,包含了被悬停链接的文本,通常是一个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); // 允许打开外部链接// 连接信号到槽函数 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(重载)
下面这些函数是QLabel子类中可以重写的函数
1.changeEvent函数
virtual void changeEvent(QEvent *ev) override
-
函数说明:
它重写了QFrame类的
changeEvent
函数。这个成员函数是Qt事件处理机制的一部分。当控件的某些属性发生变化时,如启用状态、显示状态、文字颜色等,这个事件就会被发出。 -
参数说明:
QEvent *ev
: 函数的参数是一个指向QEvent
对象的指针,它包含了事件的信息。
2.contextMenuEvent函数–右键点击上下文菜单事件
virtual void contextMenuEvent(QContextMenuEvent *ev) override
-
函数说明:
它重写了QWidget类的
contextMenuEvent
函数。这个成员函数用于响应右键点击事件,即当用户在控件上点击鼠标右键时,会触发上下文菜单事件。 -
参数说明:
QContextMenuEvent *ev
: 函数的参数是一个指向QContextMenuEvent
对象的指针,它包含了事件的信息,如鼠标的位置等。
-
示例:在自定义的CustomLabel中重写菜单事件,当点击右击CustomLabel时,出现上下文菜单
//设置菜单策略 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", "查看"); });//重写上下文菜单事件--在鼠标点击处执行菜单 void CustomLabel ::contextMenuEvent(QContextMenuEvent* event) {m_pMenu->exec(QCursor::pos()); }
3.event函数–接收与处理所有事件
virtual bool event(QEvent *e) override
-
函数说明:
event
函数是Qt事件处理机制中的一个非常底层的函数,用于接收所有事件。这个函数重写了QFrame
类中的event
函数。 -
参数说明:
QEvent *e
: 函数的参数是一个指向QEvent
对象的指针,它包含了事件的类型和相关信息。 -
示例:
bool CustomLabel::event(QEvent *e) {// 首先调用基类的event函数bool result = QLabel::event(e);// 检查事件类型if (e->type() == QEvent::MouseButtonDblClick) {// 处理双击事件qDebug("Label was double-clicked.");return true; // 事件已处理,不再传递}// 如果事件未被处理,返回基类的处理结果return result; }
4.focusInEvent函数-获得焦点事件
virtual void focusInEvent(QFocusEvent *ev) override
-
函数说明:
用于响应获得焦点的事件。当控件获得输入焦点时,这个事件会被触发。它重写了QWidget类的
focusInEvent
函数。 -
参数说明:
QFocusEvent *ev
: 函数的参数是一个指向QFocusEvent
对象的指针,它包含了焦点事件的相关信息。
-
示例:
void CustomLabel::focusInEvent(QFocusEvent *ev) {// 调用基类的focusInEvent处理基本的焦点进入逻辑QLabel::focusInEvent(ev);// 可以在这里添加自定义的焦点进入时的处理qDebug("Label has gained focus.");// 例如,可以改变标签的样式或显示效果来反映焦点状态this->setStyleSheet("QLabel { border: 1px solid blue; }"); }
5.focusNextPrevChild函数–焦点转移事件
virtual bool focusNextPrevChild(bool next) override
-
函数说明:
用于处理在控件之间转移焦点的请求。当用户通过键盘(如Tab键)在控件间导航时,这个函数会被调用。它重写了QWidget类的
focusNextPrevChild
函数。 -
参数说明:
bool next
: 函数的参数,指示焦点是向前移动(true
)还是向后移动(false
)。
-
返回值:
bool
: 函数的返回类型是布尔值,表示是否成功转移焦点。如果返回true
,表示焦点转移成功;如果返回false
,表示没有焦点可以转移,焦点将停留在当前控件上。
6.focusOutEvent函数–失去焦点事件
virtual void focusOutEvent(QFocusEvent *ev) override
-
函数说明:
用于响应失去焦点的事件。当控件的输入焦点被另一个控件获取时,这个事件会被触发。它重写了QWidget类的
focusOutEvent
函数。 -
参数说明:
QFocusEvent *ev
: 函数的参数是一个指向QFocusEvent
对象的指针,它包含了焦点事件的相关信息。
-
示例:
void CustomLabel::focusOutEvent(QFocusEvent *ev) {// 调用基类的focusOutEvent处理基本的失去焦点逻辑QLabel::focusOutEvent(ev);// 可以在这里添加自定义的失去焦点时的处理qDebug("Label has lost focus.");// 例如,可以改变标签的样式或显示效果来反映失去焦点状态this->setStyleSheet(""); // 清除之前设置的样式 }
7.keyPressEvent函数 – 键盘按键事件
virtual void keyPressEvent(QKeyEvent *ev) override
-
函数说明:
用于响应键盘按键事件。当用户在控件上按下键盘上的任意键时,这个事件会被触发。它重写了QWidget类的
keyPressEvent
函数。 -
参数说明:
QKeyEvent *ev
: 函数的参数是一个指向QKeyEvent
对象的指针,它包含了键盘事件的详细信息,如按下的键、是否同时按下了Shift或Ctrl等。
-
示例:
void CustomLabel::keyPressEvent(QKeyEvent *ev) override {// 调用基类的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;// 可以根据需要添加更多的按键事件处理default:// 如果不是我们关心的键,调用基类的处理QWidget::keyPressEvent(ev);break;} }
8.mouseMoveEvent函数–鼠标移动事件
virtual void mouseMoveEvent(QMouseEvent *ev) override
-
函数说明:
用于响应鼠标移动事件。当鼠标在控件区域内移动时,不论是否按下了鼠标键,这个事件都会被触发。它重写了QWidget类的
mouseMoveEvent
函数。 -
参数说明:
QMouseEvent *ev
: 函数的参数是一个指向QMouseEvent
对象的指针,它包含了鼠标事件的详细信息,如鼠标位置、哪些鼠标键被按下、鼠标移动的距离等。
9.mousePressEvent函数–鼠标按键按下事件
virtual void mousePressEvent(QMouseEvent *ev) override
-
函数说明:
用于响应鼠标按键按下的事件。当用户在控件上按下鼠标键时,这个事件会被触发。它重写了QWidget类的
mousePressEvent
函数。 -
参数说明:
QMouseEvent *ev
: 函数的参数是一个指向QMouseEvent
对象的指针,它包含了鼠标事件的详细信息,如鼠标位置、哪个鼠标键被按下、点击次数等。
-
示例:
void CustomLabel::mousePressEvent(QMouseEvent *ev) override {// 调用基类的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函数 --鼠标按键释放事件
virtual void mouseReleaseEvent(QMouseEvent *ev) override
-
函数说明:
用于响应鼠标按键释放的事件。当用户在控件上释放鼠标键时,这个事件会被触发。它重写了 QWidget 类的
mouseReleaseEvent
函数。 -
参数说明:
QMouseEvent *ev
: 函数的参数是一个指向QMouseEvent
对象的指针,它包含了鼠标事件的详细信息,如鼠标位置、哪个鼠标键被释放、是否有其他鼠标键同时被按下等。
11.paintEvent函数 – 控件绘制事件
virtual void paintEvent(QPaintEvent *) override
-
函数说明:
用于自定义控件的绘制过程。当控件需要重绘自身时(例如,由于大小变化、内容更新或从隐藏变为显示),这个事件会被触发。它重写了 QFrame 类的
paintEvent
函数。 -
参数说明:
QPaintEvent *
: 函数的参数是一个指向QPaintEvent
对象的指针,它包含了绘制事件的相关信息,如需要更新的区域等。