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://xiahunao.cn/news/3248002.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

在学习使用LabVIEW的过程中,需要注意哪些问题?

在学习使用LabVIEW的过程中&#xff0c;需要注意以下问题&#xff1a; 1. 基础知识 图形化编程思维&#xff1a; LabVIEW采用图形化编程方式&#xff0c;与传统的文本编程语言有很大不同&#xff0c;需要适应这种新的编程思维方式。数据流概念&#xff1a; 理解LabVIEW的核心数…

Django Q()函数

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

深入理解Android中的缓存与文件存储目录

&#x1f31f; 引言 在Android应用开发中&#xff0c;合理管理应用的数据存储至关重要。应用可能需要保存各种类型的数据&#xff0c;从简单的配置信息到多媒体文件&#xff0c;甚至是缓存数据以提高性能和用户体验。Android提供了多个内置目录来满足这些需求&#xff0c;但它…

唐山养老院哪家好---守护晚年幸福,用服务引领老年人高品质养老生活

随着社会的快速发展和人口老龄化趋势的加剧&#xff0c;老年人对养老机构的需求日益增长&#xff0c;选择养老机构作为养老方式已成为许多老年人的必然选择。随着年龄的增长&#xff0c;生理功能的退化和疾病风险的增加&#xff0c;使得老年人更加需要专业的医疗照护和日常生活…

《大数据基础》相关知识点及考点,例题

1.6大数据计算模式 1、MapReduce可以并行执行大规模数据处理任务&#xff0c;用于大规模数据集&#xff08;大于1TB&#xff09;的并行运算。MapReduce 极大地方便了分布式编程工作&#xff0c;它将复杂的、运行于大规模集群上的并行计算过程高度地抽象为两个函数一一Map和Redu…

nginx全局块的user指令

文章目录 1、user指令1.1、进入nginx解压的目录1.2、./configure --help1.3、工作进程默认是nobody 2、user指令的使用步骤:2.1、设置一个用户信息"www"2.2、 创建一个用户2.3、./nginx -s reload2.4、创建/root/html/index.html页面&#xff0c;添加如下内容2.5、修…

《电脑知识与技术》是什么级别的期刊?是正规期刊?能评职称吗?

​问题解答 问&#xff1a;《电脑知识与技术》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《电脑知识与技术》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;安徽出版集团有限责任公司 主办单位&a…

海外营销推广:快速创建维基百科(wiki)词条-大舍传媒

一、维基百科的永久留存问题 许多企业和个人关心维基百科是否能永久留存。实际上&#xff0c;只要企业和个人的行为没有引起维基百科管理方的反感&#xff0c;词条就可以长期保存。如果有恶意行为或被投诉&#xff0c;维基百科可能会对词条进行删除或修改。 二、创建维基百科…

FPGA 实现DDR4的读写

1 硬件设计 FPGA 端&#xff1a; DDR4: 2 验证方案 3 仿真验证 4 DDR4 下板验证

【有效验证】解决SQLyog连接MYSQL的错误 1251 - Client does not support

目录 一、原因分析&#xff1a; 二、进入到mysql 三、查看当前加密方式 四、更改加密方式 五、查看是否成功 前言&#xff1a;使用一个开源软件使用sqlyog、navcat都报1251错误&#xff0c;网上都是提示升级客户端&#xff0c;还有一种就是修改mysql配置。本文就是修改配置…

QT实现图片开关控件-自定义控件

开关按钮大家应该很熟悉&#xff0c;在设置里面经常遇到&#xff0c;切换时候的滑动效果比较帅气。通常说的开关按钮&#xff0c;有两个状态&#xff1a;on、off。大部分的开关按钮控件&#xff0c;基本上有两大类&#xff0c;第一类是纯代码绘制&#xff0c;这种对代码的掌控度…

WEB前端06-BOM对象

BOM浏览器对象模型 浏览器对象模型&#xff1a;将浏览器的各个组成部分封装成对象。是用于描述浏览器中对象与对象之间层次关系的模型&#xff0c;提供了独立于页面内容、并能够与浏览器窗口进行交互的对象结构。 组成部分 Window&#xff1a;浏览器窗口对象 Navigator&…

PHP手边酒店多商户版平台小程序系统源码

&#x1f3e8;【旅行新宠】手边酒店多商户版小程序&#xff0c;一键解锁住宿新体验&#xff01;&#x1f6cc; &#x1f308;【开篇&#xff1a;旅行新伴侣&#xff0c;尽在掌握】&#x1f308; 还在为旅行中的住宿选择而纠结吗&#xff1f;是时候告别繁琐的搜索和比价过程&a…

Java反射机制基础知识赏析、接口、实现类、方法

前言 最近打算手写一个RPC&#xff0c;但奈何自己Java基础知识中的反射就很欠缺&#xff0c;第一章就看不太懂了&#xff0c;特地编写了几个小Demo验证一下Java中关于反射的基础知识。 目录组织结构 代码编写 // TestService接口 package reflect.testServices;import main.v…

基于asp.net 在线订票管理系统 设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

Vue封装文件上传组件(支持图片、PDF、Excel、word预览下载)

一、准备工作 安装预览依赖包&#xff1a;exceljs、mammoth、vue-pdf 二、封装组件 文件上传组件 fileUploadPro.vue。默认预览、下载是true,可通过isPreView、isDownLoad控制 <template><div style"display: flex"><el-uploadmultipleaction&qu…

使用百度语音技术实现文字转语音

使用百度语音技术实现文字转语音 SpringBootVue前后端分离项目 调用api接口需要使用AK和SK生成AccessToken,生成getAccessToken的接口有跨域限制,所以统一的由后端处理了 部分参数在控制台->语音技术->在线调试里面能找到 Controller RestController RequestMapping(&q…

【Spring Cloud】掌握Gateway核心技术,实现高效路由与转发

目录 前言示例创建一个服务提供者创建网关 创建common子项目 前言 Spring Cloud Gateway 是一个基于 Spring Boot 的非阻塞 API 网关服务&#xff0c;它提供了动态路由、请求断言、过滤器等功能。 以下是关于 Spring Cloud Gateway 的示例&#xff1a; 示例 创建一个服务提…

C#实现数据采集系统-实现功能介绍

系统介绍 我们这里主要使用C#( .Net 6)来实现一个数据采集系统&#xff0c;从0到1搭建数据采集系统&#xff0c;从系统分析&#xff0c;功能拆解&#xff0c;到一一实现 数据采集 数据采集是企业信息化和数字化转型过程中的关键环节&#xff0c;它涉及到从生产设备、传感器…

近段时间led灯性价比最高有哪几款?五款led灯性价比最高推荐

近段时间led灯性价比最高有哪几款&#xff1f;作为学生&#xff0c;在学校学习的时候会接触到电子产品&#xff0c;在夜晚回到家&#xff0c;还得接着继续读写。长时间的用眼过度&#xff0c;会导致视力下降&#xff0c;严重的话还会出现眼部疾病。所以&#xff0c;需要一个护眼…