(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)
谢谢