QT6 源(47):标签类 QLabel : QFrame : QWidget。可见标签属于容器,及其源码。比较容器 GroupBox 与 QFrame 的差异之处。

(1)比较容器 GroupBox 与 QFrame 的差异之处,因为标签竟然也属于QFrame ,继承了 容器 QFrame 的属性:

在这里插入图片描述

(2)标签类独有的属性汇总

在这里插入图片描述

(3)源码来自于头文件 qlabel . h

#ifndef QLABEL_H
#define QLABEL_H

#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qframe.h>
#include <QtGui/qpicture.h>
#include <QtGui/qtextdocument.h>


/*
QT_CONFIG宏实现了对 Qt特性的安全编译时检查。特性可以处于三种状态:
0 或未定义:在测试时会引发编译错误
-1:该功能不可用
1:该功能可用
    The QT_CONFIG macro implements a safe compile time check for features of Qt.
    Features can be in three states:
        0 or undefined: This will lead to a compile error when testing for it
        -1: The feature is not available
        1: The feature is available
*/
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1)

#define QT_REQUIRE_CONFIG(feature) Q_STATIC_ASSERT_X(QT_FEATURE_##feature == 1,\
 "Required feature " #feature " for file " __FILE__ " not available.")

QT_REQUIRE_CONFIG(label); //编译前的源代码检查

QT_BEGIN_NAMESPACE //说明标签定义在 QT 的全局命名空间

class QLabelPrivate;


//    class QLayout : public QObject, public QLayoutIte
//    class QWidget : public QObject, public QPaintDevice
//class QFrame : public QWidget
class Q_WIDGETS_EXPORT QLabel : public QFrame
{
    Q_OBJECT //又插入了此宏

    //这个属性持有标签的文本。
    //如果未设置文本,则返回空字符串。设置文本将清除任何先前的内容。
    //文本将被解释为纯文本或富文本,具体取决于文本格式设置;
    //请参阅setTextFormat()。默认设置为 Qt::utoText;即 QLabel将尝试自动检测文本集的格式。
    //有关富文本的定义,请参阅支持的HTML子集。如果已设置好友,则将从新文本中更新好友助记键。
    //注意,QLabel非常适合显示小型富文本文档,比如从标签的调色板和字体属性获取文档特定设置
    //(字体、文本颜色、链接颜色)的小型文档。对于大型文档,请在只读模式下使用QTextEdit。
    //QTextEdit还可以在必要时提供滚动条。注意:如果文本包含富文本,此函数将启用鼠标跟踪。
    Q_PROPERTY(QString text READ text WRITE setText)

    Q_PROPERTY(Qt::TextFormat textFormat READ textFormat WRITE setTextFormat)
    //    enum TextFormat { PlainText, RichText, AutoText, MarkdownText };
    //此属性持有标签的文本格式。  默认格式是Qt::AutoText。
    //请参阅 Qt::TextFormat 枚举以了解可能的选项。

    //此属性持有标签的位图。
    //设置位图将清除任何先前的内容。如果存在,则禁用伙伴快捷方式。
    Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)

    Q_PROPERTY(bool scaledContents READ hasScaledContents WRITE setScaledContents)
    //这个属性表示标签是否将缩放其内容以填充所有可用空间。
    //当启用标签并显示位图时,它将缩放位图以填充可用空间。此属性的默认值为假。

    //Qt::Alignment = QFlags<AlignmentFlag> 上下左右的对齐
    //此属性保存了标签内容的对齐方式默认情况下,标签的内容是左对齐和垂直居中的。
    Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)

    //此属性包含标签的换行策略。默认情况下,禁用了换行。
    //如果此属性为真,则在必要时会在换行处包裹标签文本,否则,根本不会包裹。
    //本属性的意思就是是否在内容太多时自动换行显示。wrap有包裹、缠绕
    Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap)

    //此属性保存了边距的宽度。默认的边距是0。
    //边缘是帧的最内像素和内容的最外像素之间的距离。
    Q_PROPERTY(int  margin READ margin WRITE setMargin)

    Q_PROPERTY(int  indent READ indent WRITE setIndent)
    //此属性存储标签的文本缩进像素值。
    //如果标签显示文本,缩进将应用于左边缘(如果alignment()是Ot::AlignLeft),
    //应用于  右边缘(如果alignment()是Qt::AlignRight),
    //应用于顶部边缘(如果alignment()是Qt:AlignTop),
    //应用于底部边缘(如果alignment()是Ot::AlignBottom)。
    //如果缩进为负数,或者没有设置缩进,则标签计算有效缩进如下:如果
    //frameWidth()为0,则有效缩进变为0。
    //如果frameWidth()大于0,则有效缩进变为当前字体中“x”字符宽度的一半。
    //默认情况下,缩进为-1,这意味着以上述方式计算有效缩进。


    //指定QLabel是否应使用QDesktopServices::openUr()自动打开链接,
    //而不是发出linkActivated信号。
    //注意:在标签上设置的文本交互标志需要包含“鼠标可访问链接”或“键盘可访问链接”.
    //Note: The textInteractionFlags set on the label need to include
    //either LinksAccessibleByMouse or LinksAccessibleByKeyboard.
    Q_PROPERTY(bool openExternalLinks  //默认值为假。
               READ openExternalLinks WRITE setOpenExternalLinks)

    Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags
        READ textInteractionFlags WRITE setTextInteractionFlags)
    //指定标签在显示文本时如何与用户输入交互。
    //如果这些标志包含 Ot::LinksAccessibleByKeyboard,
    //则焦点策略也将自动设置为 Ot:StrongFocus。
    //如果设置了 Ot::TextSelectableByKeyboard,则焦点策略将设置为 Ot::.ClickFocus。
    //缺省值为 Ot::LinksAccessibleByMouse。

    Q_PROPERTY(QString selectedText READ selectedText)
    //此属性保存所选文本.   如果没有选择文本,则此属性的值为空字符串。
    //默认情况下,此属性包含一个空字符串。
    //注意:在标签上设置的文本交互标志需要包含“TextSelectableByMouse”或
    //TextSelectableByKeyboard”

    Q_PROPERTY(bool hasSelectedText READ hasSelectedText)
    //这个属性表示是否有任何文本被选择。  默认情况下,此属性为假。
    //hasSelectedText()如果用户选择了一些或全部文本,则返回 true;否则返回 false。
    //注意:在标签上设置的文本交互标志需要包含“TextSelectableByMouse”或
    //extSelectableByKeyboard”

private:
    Q_DISABLE_COPY(QLabel)
    Q_DECLARE_PRIVATE(QLabel)

#if QT_CONFIG(movie) //经过测试是定义了此宏的
    Q_PRIVATE_SLOT(d_func(), void _q_movieUpdated(const QRect&))
    Q_PRIVATE_SLOT(d_func(), void _q_movieResized(const QSize&))
#endif
    Q_PRIVATE_SLOT(d_func(), void _q_linkHovered(const QString &))

#ifndef QT_NO_SHORTCUT  //经测试下面的函数有效
    Q_PRIVATE_SLOT(d_func(), void _q_buddyDeleted())
#endif

    friend class QTipLabel;  //声明了一些友元类
    friend class QMessageBoxPrivate;
    friend class QBalloonTip;

public:
    //Qt::WindowFlags 指出了窗口的类型,对话框,工具窗口、子窗口等等。
    //Constructs an empty label. The parent and widget flag f,
    //arguments are passed to the QFrame constructor.
    explicit QLabel(QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags());

    explicit QLabel(const QString &text,
                    QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags());
    //Constructs a label that displays the text, text.

    ~QLabel();

//Q_PROPERTY(QString text   READ text   WRITE setText)
//Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
public Q_SLOTS:  //本类的信号与槽函数
    void setText   (const QString  &);
    void setPixmap (const QPixmap  &);
    void setPicture(const QPicture &);
    void setMovie  (QMovie *movie);
public:
    QString  text   () const;
    QPixmap  pixmap () const;
    QPicture picture() const; //Returns the label's picture.
    QMovie * movie  () const; //类型 QMovie 是无声的动图的意思
//Returns a pointer to the label's movie, or nullptr if no movie has been set.

//Q_PROPERTY(Qt::TextFormat textFormat READ textFormat WRITE setTextFormat)
    Qt::TextFormat textFormat() const;
    void        setTextFormat(Qt::TextFormat);

//Q_PROPERTY(bool scaledContents
//  READ hasScaledContents WRITE setScaledContents)
    bool hasScaledContents() const;
    void setScaledContents(bool);

//Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
    Qt::Alignment alignment() const;
    void       setAlignment(Qt::Alignment);

//Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap)
    bool    wordWrap() const ;
    void setWordWrap(bool on);

//Q_PROPERTY(int margin READ margin WRITE setMargin)
    int     margin() const;
    void setMargin(int);

//Q_PROPERTY(int indent READ indent WRITE setIndent)
    int     indent() const;
    void setIndent(int);

//Q_PROPERTY(bool openExternalLinks
//           READ openExternalLinks WRITE setOpenExternalLinks)
    bool          openExternalLinks() const;
    void       setOpenExternalLinks(bool open);

//Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags
//           READ textInteractionFlags  WRITE setTextInteractionFlags)
    Qt::TextInteractionFlags textInteractionFlags() const;
    void                  setTextInteractionFlags(Qt::TextInteractionFlags flags);
//指定标签在显示文本时如何与用户输入交互。   键盘或鼠标

//Q_PROPERTY(bool hasSelectedText READ hasSelectedText)
    bool          hasSelectedText() const;

//Q_PROPERTY(QString selectedText READ selectedText)
    QString selectedText() const;


#ifndef QT_NO_SHORTCUT
    //返回此标签的伙伴,如果当前没有设置伙伴,则为 nullptr。
    QWidget  *  buddy() const;  //buddy 老兄;朋友;伙计
    void     setBuddy(QWidget *);
#endif

/*
class QTextDocument : public QObject
{   Q_OBJECT
    using ResourceProvider = std::function<QVariant(const QUrl&)>;
}
*/  //Returns the resource provider for rich text of this label.
    QTextDocument::ResourceProvider resourceProvider() const;
    void                         setResourceProvider(const
                           QTextDocument::ResourceProvider &provider);
    //Sets the provider of resources for rich text of this label.

    QSize        sizeHint() const override;
    QSize minimumSizeHint() const override;

    int heightForWidth(int) const override;

    //selectionStart()返回标签中第一个被选择的字符的索引,如果未选择任何文本,则返回 -1。
    //注意:在标签上设置的文本交互标志  textInteractionFlags 需要包含
    //“TextSelectableByMouse”或TextSelectableByKeyboard”
    int     selectionStart() const;
    void setSelection(int start, int length);
    //Selects text from position start and for length characters.

Q_SIGNALS: //信号函数
    //This signal is emitted when the user clicks a  link.
    //The URL referred to by the anchor is passed in link.
    void linkActivated(const QString& link);
    void linkHovered  (const QString& link); //逗留;踌躇;彷徨; Hover标签上悬停
    //This signal is emitted when the user hovers over a link.
    //The URL referred to by the anchor is passed in link.

public Q_SLOTS: //槽函数
    //将标签内容设置为包含整数 num 的文本表示的纯文本。
    //如果整数的字符串表示与标签当前内容相同则清除任何先前内容。
    //如果整数的字符串表示与当前标签内容相同,则不会执行任何操作。
    //如果存在 Buddy 快捷方式,则已禁用。The buddy shortcut, if any, is disabled.
    void setNum(  int );
    void setNum(double);

    void clear(); //Clears any label contents.

protected:
    //Reimplements: QFrame::event(QEvent *e).
    bool           event  (QEvent      * e) override;
    void      paintEvent  (QPaintEvent *  ) override;
    void     changeEvent  (QEvent      *  ) override;
    void   keyPressEvent  (QKeyEvent   *ev) override;
    void mousePressEvent  (QMouseEvent *ev) override;
    void mouseMoveEvent   (QMouseEvent *ev) override;
    void mouseReleaseEvent(QMouseEvent *ev) override;

#ifndef QT_NO_CONTEXTMENU
    void contextMenuEvent(QContextMenuEvent *ev) override;
#endif // QT_NO_CONTEXTMENU

    void focusInEvent (QFocusEvent *ev) override;
    void focusOutEvent(QFocusEvent *ev) override;

    //形参为 true则 tab热键向后遍历,形参为 false则 tab热键向前遍历
    bool focusNextPrevChild(bool next) override;
    //Reimplements: QWidget::focusNextPrevChild(bool next).
}; //完结 QLabel : public QFrame

QT_END_NAMESPACE

#endif // QLABEL_H

(4)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值