Qt类 | QLabel类详解

文章目录

  • 一、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 属性,使其包含 TextSelectableByMouseTextSelectableByKeyboardTextSelectableByMouse 允许用户通过鼠标选择文本,而 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 属性,使其包含 LinksAccessibleByMouseLinksAccessibleByKeyboardLinksAccessibleByMouse 允许用户通过鼠标点击链接,而 LinksAccessibleByKeyboard 允许用户通过键盘操作选择和激活链接。
  • pixmap : QPixmap – 控件当前显示的图像

    这个属性用于保存 QLabel 控件当前显示的图像(pixmap)。

    这个属性的访问方法:

    QPixmap pixmap(Qt::ReturnByValueConstant) const // 按值获取图像的函数
    void setPixmap(const QPixmap &) // 设置图像的函数
    

    注意事项:

    • 通过 setPixmap(const QPixmap &) 函数设置图像时,会清除 QLabel 控件之前显示的所有内容,包括文本和之前设置的图像。同时,如果之前有设置快捷键伙伴(buddy shortcut),也会被禁用。
  • scaledContents : bool – 是否自动缩放其显示的内容以适应控件的大小

    这个属性用于控制 QLabel 控件是否自动缩放其显示的内容(如图像或文本)以适应控件的大小。默认情况下,scaledContentsfalse,这意味着内容不会自动缩放来填充控件空间,而是保持其原始尺寸。当 scaledContents 设置为 true 时,如果 QLabel 正在显示一个图像(pixmap),这个图像会被缩放以填充控件的所有可用空间。这可以确保图像完全适合控件的尺寸,但可能会导致图像失真。

    这个属性的访问函数:

    bool hasScaledContents() const // 检查是否启用了内容缩放的函数
    void setScaledContents(bool) // 设置是否缩放内容以填充空间的函数
    
  • selectedText : const QString – 控件中当前被用户选中的文本

    这个属性保存了 QLabel 控件中当前被用户选中的文本。默认情况下,selectedText 属性是空的,表示没有文本被选中

    这个属性的访问函数:

    QString selectedText() const // 获取当前选中文本的函数
    

    注意事项:

    • 为了使 QLabel 支持文本选择,需要设置 textInteractionFlags 属性,使其包含 TextSelectableByMouseTextSelectableByKeyboardTextSelectableByMouse 允许通过鼠标选择文本,而 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。伙伴控件通常是与标签相邻的可交互控件,如 QLineEditQComboBox 等。当用户激活标签上的助记符时,焦点将自动转移到伙伴控件上。

      伙伴机制是Qt中实现用户界面便捷访问的一种方式,特别是通过键盘快捷方式快速定位。

  • setBuddy函数

    void QLabel::setBuddy(QWidget *buddy)
    
    • 函数说明:

      用于为 QLabel 设置一个伙伴控件。当设置了伙伴控件后,如果用户按下标签文本中通过和号(&)指定的快捷键,键盘焦点会自动转移到伙伴控件上。例如,如果标签文本是 “&Name:”,则按下 Alt+N 会将焦点移动到伙伴控件。如果需要取消已经设置的伙伴,可以通过传递 nullptrsetBuddy 函数来实现。

    • 示例:

      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。

      image-20240715205105274

4.hasScaledContents与setScaledContents函数-- 是否自动缩放其显示的内容以适应控件的大小

bool hasScaledContents() const // 检查是否启用了内容缩放的函数
void setScaledContents(bool) // 设置是否缩放内容以填充空间的函数
  • 函数说明

    用于控制 QLabel 控件是否自动缩放其显示的内容(如图像或文本)以适应控件的大小。默认情况下,scaledContentsfalse,这意味着内容不会自动缩放来填充控件空间,而是保持其原始尺寸。当 scaledContents 设置为 true 时,如果 QLabel 正在显示一个图像(pixmap),这个图像会被缩放以填充控件的所有可用空间。这可以确保图像完全适合控件的尺寸,但可能会导致图像失真。

5.hasSelectedText与selectedText函数–文本选中

bool hasSelectedText() const //标签中文本是否被选中
QString selectedText() const // 获取当前选中文本的函数
  • 函数说明:

    • hasSelectedText()函数用于检查是否有文本被用户选中,如果有,则返回 true,否则返回 false。默认情况下,没有文本被选中,因此属性的值是 false

    • selectedText()函数用于获取 QLabel 控件中当前被用户选中的文本

  • 注意事项:

    • 为了使 QLabel 支持文本选择,需要设置 textInteractionFlags 属性,使其包含 TextSelectableByMouseTextSelectableByKeyboardTextSelectableByMouse 允许用户通过鼠标选择文本,而 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 {// 没有动画
      }
      

      image-20240715211933609

    • 注意事项:

      • 需要注意的是,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 属性,使其包含 LinksAccessibleByMouseLinksAccessibleByKeyboardLinksAccessibleByMouse 允许用户通过鼠标点击链接,而 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 像素
      

      image-20240715214502384

    • 注意事项:

      • 当调用 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.";
    }
    
  • 注意事项:

    为了能够使用文本选择功能,QLabeltextInteractionFlags 属性必须设置为包含 TextSelectableByMouseTextSelectableByKeyboard。这允许用户通过鼠标或键盘与文本进行交互并选择文本。

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 属性,包含 TextSelectableByMouseTextSelectableByKeyboard。这样用户才能通过鼠标或键盘选择文本,或者通过代码使用 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 {// 文本格式为纯文本
    }
    

    image-20240715215509319

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;
    

    image-20240715220336986

    此时,点击链接,会自动打开百度网页。

  • 注意事项:

    • 通过 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.");
    

    启动自动换行策略后,显示如下:

    image-20240715221821654

四、Reimplemented Public Functions(重载)

1.heightForWidth函数

[override virtual] int QLabel::heightForWidth(int w) const
  • 函数说明:

    重写此函数允许 QLabel 提供自己的逻辑来确定其在特定宽度下的高度。heightForWidth(int w) constQWidget 类的一个虚函数,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 {// 没有动画
    }
    

    image-20240715211933609

  • 注意事项:

    • 需要注意的是,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 像素
    

    image-20240715214502384

  • 注意事项:

    • 当调用 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;
    

    image-20240715220336986

    此时,点击链接,会自动打开百度网页。

  • 注意事项:

    • 通过 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);
    }
    

    image-20240716131051101

七、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 对象的指针,它包含了绘制事件的相关信息,如需要更新的区域等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/47507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于YOLOv8深度学习的水果智能检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、卷积神经网络

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

C#字符串基本操作

1、代码 //1、创建字符串&#xff08;获取长度&#xff09;string str "Hello, World!";Console.WriteLine($"string:{str},length:{str.Length}");//2、字符串连接string str1 "Hello, ";string str2 "World!";Console.WriteLine…

在 Windows 11/10/8 上恢复误删除文件的最佳方法

如果您刚刚在计算机上重新安装了 Windows 操作系统&#xff0c;结果硬盘上的所有文件都消失了&#xff0c;有没有办法从 Windows 11/10 中恢复误删除的文件&#xff1f; 许多因素都可能导致 PC 上的文件被删除。除了重新安装操作系统外&#xff0c;其他常见原因还包括意外删除…

Vue.js 生命周期详解:从创建到销毁的全过程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

【BUG】已解决:java.lang.reflect.InvocationTargetException

已解决&#xff1a;java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发…

STM32 IAP 需要关注的一些事

1、首先要知道STM32的程序是如何分布在FLASH中的。 2、升级的时候涉及到两个程序&#xff0c;一个是bootloader&#xff0c;一个是user程序&#xff0c;这两个程序的功能分别的什么作用的&#xff1f; 3、编译的固件是怎么分布的&#xff1f;通过那个配置文件去指导编译器去排布…

Spring Boot集成kudu快速入门Demo

1.什么是kudu 在Kudu出现前&#xff0c;由于传统存储系统的局限性&#xff0c;对于数据的快速输入和分析还没有一个完美的解决方案&#xff0c;要么以缓慢的数据输入为代价实现快速分析&#xff0c;要么以缓慢的分析为代价实现数据快速输入。随着快速输入和分析场景越来越多&a…

十五、【机器学习】【监督学习】- 神经网络回归

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

Django Q()函数

Q() 函数的作用 在Django中&#xff0c;Q()函数是一个非常有用的工具&#xff0c;主要用于构建复杂的查询。它允许你创建复杂的查询语句&#xff0c;包括AND、OR和NOT逻辑操作。这对于处理复杂的数据库查询特别有用&#xff0c;特别是在你需要组合多个条件或处理复杂的过滤逻辑…

HLS加密技术:保障流媒体内容安全的利器

随着网络视频内容的爆炸性增长&#xff0c;如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS&#xff08;HTTP Live Streaming&#xff09;加密技术作为一种先进的流媒体加密手段&#xff0c;凭借其高效性和安全性&#xff0c;在直播、点播等场景中得到了广泛应…

【C语言】联合体(union)

文章目录 1.联合体的含义2. 联合体的声明3. 联合体大小的计算4. 联合体的特点 1.联合体的含义 联合体也叫做共用体&#xff0c;是指联合体的所有成员共用同一块内存空间。这也就说明了&#xff0c;联合体的大小至少是其成员所占空间的最大值。 2. 联合体的声明 #include<…

【整体介绍】HTML和JS编写多用户VR应用程序的框架

一、Networked-Aframe是什么&#xff1f; 简称NAF&#xff0c;底层基于Mozilla的AFrame框架&#xff0c;用HTML和JS编写多用户VR应用程序的框架。 二、特性 支持 WebRTC 和/或 WebSocket 连接。 语音聊天。音频流让您的用户在应用程序内交谈&#xff08;仅限 WebRTC&#xff…

2024全球和国内最常用的弱密码,有没有你的?

密码管理器NordPass分析了来自公开来源的超过4.3TB 的密码数据&#xff0c;找出了当前为止&#xff08;2024年&#xff09;最常用&#xff08;最脆弱&#xff09;的密码。 这些密码主要有下面这些特征&#xff1a; 简单且常用&#xff0c;万年弱密码&#xff0c;比如123456、a…

智慧消防建设方案(完整方案参考PPT)

智慧消防系统建设方案旨在通过物联网、大数据与云计算技术&#xff0c;集成火灾自动报警、智能监控、应急指挥等功能于一体。方案部署智能传感器监测火情&#xff0c;实时数据分析预警&#xff0c;实现火灾早发现、早处置。构建可视化指挥平台&#xff0c;优化应急预案&#xf…

Python中发送邮件的艺术:普通邮件、PDF附件与Markdown附件

用的是qq邮箱,具体获取smtp的password可以看这个文章 获取密码 Python中发送邮件的艺术:普通邮件、PDF附件与Markdown附件 在今天的博客中,我们将探讨如何使用Python的smtplib库来发送电子邮件,包括发送普通文本邮件、携带PDF文件的邮件和附带Markdown文件的邮件。这些功能…

视频号助手获取feedId

1.登陆视频号 2.内容管理-视频 3.视频后分享

Git 用法

基本介绍 版本控制工具用处&#xff1a; 备份代码还原协同开发追溯 版本控制工具 1、集中式版本控制工具 版本库是集中存放在中央服务器的&#xff0c;team 里每个人 work 时从中央服务器下载代码&#xff0c;是必须联网才能工作&#xff0c;局域网或互联网。个人修改后然后…

【BUG】已解决:WslRegisterDistribution failed with error: 0x800701bc

已解决&#xff1a;WslRegisterDistribution failed with error: 0x800701bc 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十一章 文件IO和标准IO

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

MySQL_基础知识

目录 一、数据库 二、数据库操作 2.1 显示当前数据库 2.2 创建数据库 2.3 删除数据库 2.4 使用数据库 三、数据类型 3.1 数值类型 3.2 字符串类型 3.3 日期类型 四、表的操作 4.1 创建表 4.2 显示当前库中的表 4.3 查看表结构 4.4 删除表 总结 一、数据库 数据…