QT6 源(106):阅读与注释重要的基类控件 QWidget,这是其精简版,完整注释版为篇 37。并补充本类里关于尺寸坐标大小方面的属性知识

(1)原篇幅 37 为最开始整理,整理的不是太完善。重点不突出。故重新整理,但删除了大量的注释,重在突出本 QWidget类的内部逻辑,更易观察其包含了哪些内容。至于不理解的成员函数与属性,内容已不太多了,查阅官方注释即可。
这是篇 37 的超文本链接,那里的注释较完整些
(2)


#ifndef QWIDGET_H
#define QWIDGET_H

#include <QtWidgets/qtwidgetsglobal.h>
#include <QtGui/qwindowdefs.h>
#include <QtCore/qobject.h>
#include <QtCore/qmargins.h>
#include <QtGui/qpaintdevice.h>
#include <QtGui/qpalette.h>
#include <QtGui/qfont.h>
#include <QtGui/qfontmetrics.h>
#include <QtGui/qfontinfo.h>
#include <QtWidgets/qsizepolicy.h>
#include <QtGui/qregion.h>
#include <QtGui/qbrush.h>
#include <QtGui/qcursor.h>
#  include <QtGui/qkeysequence.h>

#ifdef QT_INCLUDE_COMPAT
#include <QtGui/qevent.h>
#endif

QT_BEGIN_NAMESPACE


class QLayout;
class QStyle;
class QAction;
class QVariant;
class QWindow;
class QActionEvent;
class QMouseEvent;
class QWheelEvent;
class QHoverEvent;
class QKeyEvent;
class QEnterEvent;
class QFocusEvent;
class QPaintEvent;
class QMoveEvent;
class QResizeEvent;
class QCloseEvent;
class QContextMenuEvent;
class QInputMethodEvent;
class QTabletEvent;
class QDragEnterEvent;
class QDragMoveEvent;
class QDragLeaveEvent;
class QDropEvent;
class QScreen;
class QShowEvent;
class QHideEvent;
class QIcon;
class QBackingStore;
class QPlatformWindow;
class QLocale;
class QGraphicsProxyWidget;
class QGraphicsEffect;
class QRasterWindowSurface;
class QUnifiedToolbarSurface;
class QPixmap;
class QDebug;



template <>  //至此,该类型转换函数支持了对到 QWidget * 指针类型的准还
inline       QWidget * qobject_cast<      QWidget *>(      QObject * o)
{
    if (!o || !o->isWidgetType()) return nullptr;

    return static_cast<QWidget*>(o);  //可见,核心还是 c++ 的静态类型转换
}

template <>
inline const QWidget * qobject_cast<const QWidget *>(const QObject * o)
{
    if (!o || !o->isWidgetType()) return nullptr;

    return static_cast<const QWidget*>(o);
}


#define QWIDGETSIZE_MAX ((1<<24)-1)

//说明本指针类型可以交给 QDebug 输出来调试
Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QWidget *);

class QWidgetData
{
public:
    WId winid;
    uint widget_attributes;
    Qt::WindowFlags window_flags;
    uint window_state : 4;
    uint focus_policy : 4;
    uint sizehint_forced :1;
    uint is_closing :1;
    uint in_show : 1;
    uint in_set_window_state : 1;
    mutable uint fstrut_dirty : 1;
    uint context_menu_policy : 3;
    uint window_modality : 2;
    uint in_destructor : 1;
    uint unused : 13;
    QRect crect;
    mutable QPalette pal;
    QFont fnt;
    QRect wrect;
};

class QWidgetPrivate;

class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
{
    Q_OBJECT
    Q_DECLARE_PRIVATE(QWidget)

    Q_PROPERTY(QString     windowTitle      //先文本量,再布尔量,再其它,再数字量
                READ       windowTitle      WRITE     setWindowTitle
                NOTIFY     windowTitleChanged)  //标题栏的文本

    Q_PROPERTY(QIcon       windowIcon       //标题栏的左上角的图标
                READ       windowIcon       WRITE     setWindowIcon
                NOTIFY     windowIconChanged)

    Q_PROPERTY(QString     windowIconText   // deprecated 废弃
                READ       windowIconText   WRITE     setWindowIconText
                NOTIFY     windowIconTextChanged)

    Q_PROPERTY(QString     toolTip
                READ       toolTip          WRITE     setToolTip)

    Q_PROPERTY(int         toolTipDuration  //以毫秒为单位
                READ       toolTipDuration  WRITE     setToolTipDuration)

    Q_PROPERTY(QString     statusTip        //状态栏的提示信息
                READ       statusTip        WRITE     setStatusTip)

    Q_PROPERTY(QString     whatsThis
                READ       whatsThis        WRITE     setWhatsThis)

    Q_PROPERTY(QString     accessibleName   //也是提示信息
                READ       accessibleName   WRITE     setAccessibleName)

    Q_PROPERTY(QString     accessibleDescription
                READ       accessibleDescription
                WRITE   setAccessibleDescription)

    Q_PROPERTY(QString     styleSheet
                READ       styleSheet       WRITE     setStyleSheet)

    Q_PROPERTY(QLocale     locale
                READ       locale           WRITE     setLocale
                RESET      unsetLocale)

    Q_PROPERTY(QString     windowFilePath
                READ       windowFilePath   WRITE     setWindowFilePath)


    Q_PROPERTY(bool               enabled
                READ            isEnabled   WRITE     setEnabled)

    Q_PROPERTY(bool        updatesEnabled
                READ       updatesEnabled   WRITE     setUpdatesEnabled
                DESIGNABLE        false)

    Q_PROPERTY(bool        focus            READ      hasFocus)

    //此属性表示该小部件是否为模态小部件。默认情况下,此属性为假。
    //这个属性只对窗口有意义。模态小部件会阻止所有其他窗口中的小部件获得任何输入。
    Q_PROPERTY(bool        modal            READ      isModal)

    Q_PROPERTY(Qt::WindowModality      windowModality
                READ                   windowModality
                WRITE               setWindowModality)

    //这个属性表示是否为该小部件启用了鼠标跟踪。 如果禁用鼠标跟踪(默认情况),
    //则在移动鼠标时按下至少一个鼠标按钮时,小部件仅接收鼠标移动事件。
    //如果启用了鼠标跟踪,即使没有按下按钮,小部件也会接收鼠标移动事件。
    Q_PROPERTY(bool        mouseTracking
                READ    hasMouseTracking    WRITE      setMouseTracking)

    Q_PROPERTY(bool       tabletTracking
                READ   hasTabletTracking    WRITE      setTabletTracking)
    //此属性表示是否启用了小部件的平板电脑跟踪功能。如果禁用平板电脑跟踪(默认设置),
    //则小部件仅在笔与平板电脑接触时或在笔移动时按下至少一个笔按钮时接收平板电脑移动事件。
    //如果启用了平板电脑跟踪,即使在接近时悬停,小部件也会接收平板电脑移动事件。
    //这有助于监控位置以及旋转和倾斜等辅助属性,并在用户界面中提供反馈。


    Q_PROPERTY(bool       isActiveWindow    READ       isActiveWindow)

    Q_PROPERTY(bool         visible
                READ      isVisible         WRITE      setVisible
                DESIGNABLE    false)

    Q_PROPERTY(bool        minimized        READ       isMinimized)

    Q_PROPERTY(bool        maximized        READ       isMaximized)

    Q_PROPERTY(bool        fullScreen       READ       isFullScreen)

    //此属性表示组件是否接受拖动来的其它对象。
    //将此属性设置为 true 可以向系统宣布此小部件可能能够接受拖放事件。
    //如果小部件是桌面(windowType()==Qt::Desktop),如果另一个应用程序正在使用桌面,则可能失败;
    //您可以调用acceptDrops()来测试是否发生这种情况。
    //默认情况下,此属性为假。   !警告:不要在拖放事件处理程序中修改此属性。
    Q_PROPERTY(bool        acceptDrops
                READ       acceptDrops      WRITE      setAcceptDrops)

    Q_PROPERTY(bool        windowModified
                READ     isWindowModified   WRITE      setWindowModified)

    Q_PROPERTY(bool        autoFillBackground
                READ       autoFillBackground
                WRITE   setAutoFillBackground)

    // 窗口标志是一种类型(如 Qt::Dialog)和零个或更多窗口系统提示的组合
    // (如 Qt:FramelessWindowHint)
    // 如果该小部件具有类型 Qt::Widget 或 Qt::SubWindow,
    // 且它成为窗口(Qt::Window、Qt::Dialog等),则将其放置在桌面上的位置(0,0)。
    // 如果该小部件是窗口,且它成为Qt::Widget 或 Qt::Sub Window,
    // 则相对于其父级小部件,将其放置在位置(0,0)。
    // 注意:当更改窗口的标志时,此函数会调用setParent(),导致小部件被隐藏。
    // 你必须调用show()方法使小部件再次可见。
    QDOC_PROPERTY(Qt::WindowFlags    windowFlags
                READ                 windowFlags
                WRITE             setWindowFlags)

    Q_PROPERTY(QPalette    palette         //调色板
                READ       palette         WRITE      setPalette)

    Q_PROPERTY(QFont       font
                READ       font            WRITE      setFont)

    Q_PROPERTY(QCursor     cursor          //光标
                READ       cursor          WRITE      setCursor
                RESET unsetCursor)

    //这个枚举类型定义了小部件在获取键盘焦点方面可以具有的各种策略。
    //enum Qt::FocusPolicy { NoFocus, TabFocus, ClickFocus, WheelFocus...}
    Q_PROPERTY(Qt::FocusPolicy                 focusPolicy
                READ                           focusPolicy
                WRITE                       setFocusPolicy)


    //此属性持有小部件的默认布局行为。如果存在一个QLayout来管理此小部件的子元素,
    //则使用该布局指定的大小策略。如果没有这样的QLayout则使用此函数的返回值。
    //默认策路是Preferred/Preferred,这意味着小部件可以自由调整大小,
    //但倾向于返回sizeHint()返回的大小。类似按钮的小部件将设置大小策略,以指定它们可以水平拉伸,
    //但垂直固定,这同样适用于lineedit控件(如QLineEdit、QSpinBox或可编辑的QComboBox)和
    //其他水平排列的小部件(如QProgressBar)。QToolButton通常是正方形的,
    //因此它们允许双向生长支持不同方向的小部件(如QSlider、QScrollBar或QHeader)仅指定
    //在相应方向上的拉伸。可以提供滚动条的小部件(通常是 QScrollArea的子类)倾向于
    //指定它们可以使用额外的空间并且它们可以使用小于 sizeHint()的空间。
    Q_PROPERTY(QSizePolicy                      sizePolicy
                READ                            sizePolicy
                WRITE                        setSizePolicy)

    //这个枚举类型定义了小部件在显示上下文菜单方面可以具有的各种策略。
    //enum Qt::ContextMenuPolicy { DefaultContextMenu, ActionsContextMenu, ... };
    Q_PROPERTY(Qt::ContextMenuPolicy     contextMenuPolicy
                READ                     contextMenuPolicy
                WRITE                 setContextMenuPolicy)

    //右对齐布局对于某些语言是必要的,特别是阿拉伯语和希伯来语。
    //enum Qt::LayoutDirection { LeftToRight, RightToLeft, LayoutDirectionAuto };
    Q_PROPERTY(Qt::LayoutDirection       layoutDirection
                READ                     layoutDirection
                WRITE                 setLayoutDirection
                RESET               unsetLayoutDirection)

    //该小部件具有的特定提示输入方法。
    //这仅适用于输入小部件。输入法使用它来检索有关输入法应如何操作的提示。
    //例如,如果启用了Qt::lmhFormattedNumbersOnly标志,则输入法可能会更改其视觉组件,
    //以反映只能输入数字。
    //警告:某些小部件需要特定的标志才能按预期工作。
    Q_PROPERTY(Qt::InputMethodHints      inputMethodHints
                READ                     inputMethodHints
                WRITE                 setInputMethodHints)


    Q_PROPERTY(QRect           geometry
                READ           geometry      WRITE      setGeometry)

    Q_PROPERTY(QRect      frameGeometry      READ     frameGeometry)

    Q_PROPERTY(QRect     normalGeometry      READ    normalGeometry)

    Q_PROPERTY(QRect               rect      READ              rect)

    Q_PROPERTY(QRect       childrenRect      READ      childrenRect)

    Q_PROPERTY(QRegion     childrenRegion    READ      childrenRegion)

    Q_PROPERTY(QSize         frameSize       READ      frameSize)

    Q_PROPERTY(QSize              size
                READ              size       WRITE        resize
                DESIGNABLE        false      STORED       false)

    Q_PROPERTY(QSize              sizeHint    READ       sizeHint)

    //这个属性持有小部件的尺寸增量。当用户调整窗口大小时,大小将以
    //sizelncrement().width()像素的水平增量和sizelncrement()height()像素的垂直增量移动,
    //以 baseSize()为基础。首选小部件大小是非负整数i和 j。
    //请注意,虽然您可以设置所有小部件的大小增量,但它只影响窗口。
    //默认情况下,此属性包含宽度为0、高度为0的尺寸。
    //警告:在 Windows 下,大小增量没有影响,X11的窗口管理器可能会忽略它。
    //机器翻译时,总把 Widget 翻译成小部件,把  window 翻译成窗口。这可能不大准确。
    Q_PROPERTY(QSize              sizeIncrement
                READ              sizeIncrement
                WRITE          setSizeIncrement)

    Q_PROPERTY(QSize          baseSize
                READ          baseSize        WRITE      setBaseSize)

    Q_PROPERTY(QSize       minimumSizeHint
                READ       minimumSizeHint)

    Q_PROPERTY(QSize       minimumSize
                READ       minimumSize        WRITE      setMinimumSize)

    Q_PROPERTY(QSize       maximumSize
                READ       maximumSize        WRITE      setMaximumSize)

    Q_PROPERTY(int         minimumWidth
                READ       minimumWidth       WRITE      setMinimumWidth
                STORED           false
                DESIGNABLE       false)

    Q_PROPERTY(int         minimumHeight
                READ       minimumHeight      WRITE      setMinimumHeight
                STORED           false
                DESIGNABLE       false)

    Q_PROPERTY(int         maximumWidth
                READ       maximumWidth       WRITE      setMaximumWidth
                STORED           false
                DESIGNABLE       false)

    Q_PROPERTY(int         maximumHeight
                READ       maximumHeight      WRITE      setMaximumHeight
                STORED           false
                DESIGNABLE       false)

    Q_PROPERTY(int   width    READ   width)

    Q_PROPERTY(int   height   READ   height)

    Q_PROPERTY(int   x        READ    x)

    Q_PROPERTY(int   y        READ    y)

    Q_PROPERTY(QPoint   pos
                READ    pos   WRITE   move
                DESIGNABLE   false    STORED   false)


    Q_PROPERTY(double      windowOpacity
                READ       windowOpacity    WRITE    setWindowOpacity)


private:
    void setBackingStore(QBackingStore *store);

    bool testAttribute_helper(Qt::WidgetAttribute) const;

    QLayout *takeLayout();

    friend class QBackingStoreDevice;
    friend class QWidgetRepaintManager;
    friend class QApplication;
    friend class QApplicationPrivate;
    friend class QGuiApplication;
    friend class QGuiApplicationPrivate;
    friend class QBaseApplication;
    friend class QPainter;
    friend class QPainterPrivate;
    friend class QPixmap; // for QPixmap::fill()
    friend class QFontMetrics;
    friend class QFontInfo;
    friend class QLayout;
    friend class QWidgetItem;
    friend class QWidgetItemV2;
    friend class QX11PaintEngine;
    friend class QWin32PaintEngine;
    friend class QShortcutPrivate;
    friend class QWindowSurface;
    friend class QGraphicsProxyWidget;
    friend class QGraphicsProxyWidgetPrivate;
    friend class QStyleSheetStyle;
    friend struct QWidgetExceptionCleaner;
    friend class QWidgetWindow;
    friend class QAccessibleWidget;
    friend class QAccessibleTable;
    friend class QAccessibleTabButton;

    friend class QGestureManager;
    friend class QWinNativePanGestureRecognizer;

    friend class QWidgetEffectSourcePrivate;


    friend Q_WIDGETS_EXPORT QWidgetData *qt_qwidget_data(QWidget *widget);
    friend Q_WIDGETS_EXPORT QWidgetPrivate *qt_widget_private(QWidget *widget);

private:
    Q_DISABLE_COPY(QWidget)
    Q_PRIVATE_SLOT(d_func(), void _q_showIfNotHidden())
    Q_PRIVATE_SLOT(d_func(), QWindow *_q_closestWindowHandle())

    QWidgetData * data;

protected:
    QWidget(QWidgetPrivate & d, QWidget * parent, Qt::WindowFlags f);

public:
    enum RenderFlag {
        DrawWindowBackground = 0x1,
        DrawChildren = 0x2,
        IgnoreMask = 0x4
    };
    Q_DECLARE_FLAGS(RenderFlags, RenderFlag)

    explicit QWidget(QWidget * parent = nullptr,
                    Qt::WindowFlags f = Qt::WindowFlags());

    ~QWidget();

// Q_PROPERTY(QString     windowTitle    //先文本量,再布尔量,再其它,再数字量
//             READ       windowTitle      WRITE     setWindowTitle
//             NOTIFY     windowTitleChanged)
              QString     windowTitle() const;
public Q_SLOTS :
              void     setWindowTitle(const QString &);
Q_SIGNALS:
              void        windowTitleChanged(const QString & title);

public:
// Q_PROPERTY(QIcon       windowIcon
//             READ       windowIcon       WRITE     setWindowIcon
//             NOTIFY     windowIconChanged)
              QIcon       windowIcon() const;
              void     setWindowIcon(       const QIcon & icon);
Q_SIGNALS :
              void        windowIconChanged(const QIcon & icon);

public:
// Q_PROPERTY(QString     windowIconText
//             READ       windowIconText   WRITE     setWindowIconText
//             NOTIFY     windowIconTextChanged) // deprecated 废弃
              QString     windowIconText() const;
              void     setWindowIconText(const QString &);
Q_SIGNALS :
              void        windowIconTextChanged(const QString & iconText);

public:
// Q_PROPERTY(QString     toolTip
//             READ       toolTip          WRITE     setToolTip)
              QString     toolTip() const;
              void     setToolTip(const QString &);

// Q_PROPERTY(int         toolTipDuration
//             READ       toolTipDuration  WRITE     setToolTipDuration)
              int         toolTipDuration() const;
              void     setToolTipDuration(int msec);


// Q_PROPERTY(QString     statusTip
//             READ       statusTip        WRITE     setStatusTip)
              QString     statusTip() const;
               void    setStatusTip(const QString &);


// Q_PROPERTY(QString     whatsThis
//             READ       whatsThis        WRITE     setWhatsThis)
              QString     whatsThis() const;
               void    setWhatsThis(const QString &);


// Q_PROPERTY(QString     accessibleName
//             READ       accessibleName   WRITE     setAccessibleName)
               QString    accessibleName() const;
               void    setAccessibleName(const QString & name);


// Q_PROPERTY(QString     accessibleDescription
//             READ       accessibleDescription
//             WRITE   setAccessibleDescription)
              QString     accessibleDescription() const;
               void    setAccessibleDescription(const QString & description);


// Q_PROPERTY(QString     styleSheet
//             READ       styleSheet       WRITE     setStyleSheet)
              QString     styleSheet() const;
public Q_SLOTS :
               void    setStyleSheet(const QString & styleSheet);

public:
// Q_PROPERTY(QLocale     locale
//             READ       locale           WRITE     setLocale
//            RESET  unsetLocale)
              QLocale     locale() const;
               void    setLocale(const QLocale & locale);
               void  unsetLocale();


// Q_PROPERTY(QString     windowFilePath
//             READ       windowFilePath   WRITE     setWindowFilePath)
              QString     windowFilePath() const;
               void    setWindowFilePath(const QString & filePath);


// Q_PROPERTY(bool               enabled
//             READ            isEnabled   WRITE     setEnabled)
               bool            isEnabled  () const;
               bool            isEnabledTo(const QWidget *) const;
public Q_SLOTS :
               void           setEnabled  (bool);
               void           setDisabled (bool);

public:
// Q_PROPERTY(bool        updatesEnabled
//            READ        updatesEnabled   WRITE     setUpdatesEnabled
//            DESIGNABLE        false)
    inline    bool        updatesEnabled() const;
              void     setUpdatesEnabled(bool enable);

// Q_PROPERTY(bool        focus            READ      hasFocus) //后面还有属性 focusPolicy
              bool     hasFocus() const;
public Q_SLOTS :
    inline    void     setFocus() { setFocus(Qt::OtherFocusReason); }
public:
    void               setFocus(Qt::FocusReason reason);
    void             clearFocus();

// Q_PROPERTY(bool        mouseTracking    //鼠标跟踪
//            READ     hasMouseTracking    WRITE      setMouseTracking)
              bool     hasMouseTracking() const;
              void     setMouseTracking(bool enable);


// Q_PROPERTY(bool       tabletTracking    //触摸屏跟踪
//            READ    hasTabletTracking    WRITE      setTabletTracking)
              bool    hasTabletTracking() const;
              void    setTabletTracking(bool enable);


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

// Q_PROPERTY(bool         visible
//            READ       isVisible         WRITE      setVisible
//            DESIGNABLE     false)
              bool       isVisible  () const;
              bool       isVisibleTo(const QWidget *) const;
    inline    bool       isHidden   () const;
public Q_SLOTS :
    virtual   void      setVisible  (bool visible);
              void      setHidden   (bool hidden );
              void         show ();
              void         hide ();
              bool         close();

public:
// Q_PROPERTY(bool        minimized        READ       isMinimized)
              bool      isMinimized() const;
public Q_SLOTS :
              void    showMinimized();

public:
// Q_PROPERTY(bool        maximized        READ       isMaximized)
              bool      isMaximized() const;
public Q_SLOTS :
              void    showMaximized();

public:
// Q_PROPERTY(bool        fullScreen       READ       isFullScreen)
              bool      isFullScreen() const;
public Q_SLOTS :
              void    showFullScreen();

public:
// Q_PROPERTY(bool        acceptDrops
//            READ        acceptDrops      WRITE      setAcceptDrops)
              bool        acceptDrops() const;
              void     setAcceptDrops(bool on);


// Q_PROPERTY(bool        windowModified
//            READ      isWindowModified   WRITE      setWindowModified)
              bool      isWindowModified() const;
public Q_SLOTS :
              void     setWindowModified(bool);

public:
// Q_PROPERTY(bool        autoFillBackground
//            READ        autoFillBackground
//            WRITE    setAutoFillBackground)
              bool        autoFillBackground() const;
              void     setAutoFillBackground(bool   enabled);

// Q_PROPERTY(bool                         modal            READ      isModal)
              bool                       isModal() const;

// Q_PROPERTY(Qt::WindowModality      windowModality
//             READ                   windowModality
//             WRITE               setWindowModality)
              Qt::WindowModality      windowModality() const;
    void       setWindowModality( Qt::WindowModality    windowModality);

// QDOC_PROPERTY(Qt::WindowFlags    windowFlags
//             READ                 windowFlags
//             WRITE             setWindowFlags)
        inline   Qt::WindowFlags    windowFlags() const;
               void              setWindowFlags(Qt::WindowFlags  type);            
               void         overrideWindowFlags(Qt::WindowFlags  type);
               void              setWindowFlag (Qt::WindowType,  bool on = true);


// Q_PROPERTY(QPalette    palette
//             READ       palette         WRITE      setPalette)
        const QPalette &  palette() const;
               void    setPalette(const QPalette &);


// Q_PROPERTY(QFont       font
//             READ       font            WRITE      setFont)
        const QFont  &    font() const;
               void    setFont(const QFont &);

        QFontMetrics      fontMetrics() const;
        QFontInfo         fontInfo() const;


// Q_PROPERTY(QCursor     cursor
//             READ       cursor          WRITE      setCursor
//             RESET unsetCursor)
               QCursor    cursor() const;
               void    setCursor(const QCursor &);
               void  unsetCursor();


// Q_PROPERTY(Qt::FocusPolicy         focusPolicy //也有布尔属性 focus,在前面
//             READ                   focusPolicy
//             WRITE               setFocusPolicy)
               Qt::FocusPolicy        focusPolicy() const; //焦点策略
               void                setFocusPolicy(Qt::FocusPolicy policy);

               QWidget  *             focusProxy() const;  //焦点代理,一字之差
               void                setFocusProxy(QWidget *);


// Q_PROPERTY(QSizePolicy             sizePolicy
//             READ                   sizePolicy
//             WRITE               setSizePolicy)
               QSizePolicy            sizePolicy() const;
               void                setSizePolicy(QSizePolicy);
        inline void                setSizePolicy(QSizePolicy::Policy horizontal,
                                                 QSizePolicy::Policy vertical);


// Q_PROPERTY(Qt::ContextMenuPolicy     contextMenuPolicy
//             READ                     contextMenuPolicy
//             WRITE                 setContextMenuPolicy)
              Qt::ContextMenuPolicy     contextMenuPolicy() const;
       void    setContextMenuPolicy(Qt::ContextMenuPolicy policy);


// Q_PROPERTY(Qt::LayoutDirection       layoutDirection
//             READ                     layoutDirection
//             WRITE                 setLayoutDirection
//             RESET               unsetLayoutDirection)
              Qt::LayoutDirection       layoutDirection() const;
        void   setLayoutDirection(  Qt::LayoutDirection   direction  );
               void                unsetLayoutDirection();


// Q_PROPERTY(Qt::InputMethodHints      inputMethodHints
//             READ                     inputMethodHints
//             WRITE                 setInputMethodHints)
              Qt::InputMethodHints      inputMethodHints() const;
        void   setInputMethodHints( Qt::InputMethodHints  hints);


// Q_PROPERTY(double      windowOpacity    //不透明度
//             READ       windowOpacity    WRITE    setWindowOpacity)
               qreal      windowOpacity() const;
               void    setWindowOpacity(qreal level);


// Q_PROPERTY(QRect           geometry
//             READ           geometry      WRITE      setGeometry)
        const QRect    &      geometry() const;
        inline void        setGeometry(int x, int y, int w, int h);
               void        setGeometry(const QRect &);

        QByteArray        saveGeometry() const;
               void     updateGeometry();
               bool    restoreGeometry(const QByteArray & geometry);


// Q_PROPERTY(QRect      frameGeometry      READ     frameGeometry)
              QRect      frameGeometry() const;

// Q_PROPERTY(QRect     normalGeometry      READ    normalGeometry)
              QRect     normalGeometry() const;

// Q_PROPERTY(QRect               rect      READ              rect)
    inline    QRect               rect() const;
              QRect       contentsRect() const;

// Q_PROPERTY(QRect       childrenRect      READ      childrenRect)
              QRect       childrenRect() const;

// Q_PROPERTY(QRegion     childrenRegion    READ      childrenRegion)
              QRegion     childrenRegion() const;
              QRegion      visibleRegion() const;

// Q_PROPERTY(QSize         frameSize       READ      frameSize)
              QSize         frameSize() const;

// Q_PROPERTY(QSize              size
//             READ              size       WRITE        resize
//             DESIGNABLE        false      STORED       false)
              QSize              size() const;
              void             resize(int w, int h);
              void             resize(const QSize &);

// Q_PROPERTY(QSize              sizeHint    READ       sizeHint)
    virtual   QSize              sizeHint()    const;
    virtual   bool      hasHeightForWidth()    const;
    virtual   int          heightForWidth(int) const;

// Q_PROPERTY(QSize       minimumSizeHint
//             READ       minimumSizeHint)
    virtual   QSize       minimumSizeHint() const;

// Q_PROPERTY(QSize              sizeIncrement
//             READ              sizeIncrement
//             WRITE          setSizeIncrement)
              QSize              sizeIncrement() const;
               void           setSizeIncrement(const QSize &);
               void           setSizeIncrement(int w, int h);


// Q_PROPERTY(QSize          baseSize
//             READ          baseSize        WRITE      setBaseSize)
              QSize          baseSize() const;
               void       setBaseSize(const QSize &);
               void       setBaseSize(int basew, int baseh);


// Q_PROPERTY(QSize       minimumSize
//             READ       minimumSize        WRITE      setMinimumSize)
              QSize       minimumSize() const;
              void     setMinimumSize(const QSize &);
              void     setMinimumSize(int minw, int minh);


// Q_PROPERTY(QSize       maximumSize
//             READ       maximumSize        WRITE      setMaximumSize)
              QSize       maximumSize() const;
               void    setMaximumSize(const QSize &);
               void    setMaximumSize(int maxw, int maxh);


// Q_PROPERTY(int            minimumWidth
//            READ           minimumWidth       WRITE      setMinimumWidth
//            STORED            false
//            DESIGNABLE        false)
              int            minimumWidth() const;
              void        setMinimumWidth(int minw);


// Q_PROPERTY(int            minimumHeight
//            READ           minimumHeight      WRITE      setMinimumHeight
//            STORED            false
//            DESIGNABLE        false)
              int            minimumHeight() const;
              void        setMinimumHeight(int minh);


// Q_PROPERTY(int              maximumWidth
//            READ             maximumWidth       WRITE      setMaximumWidth
//            STORED           false
//            DESIGNABLE       false)
              int              maximumWidth() const;
              void          setMaximumWidth(int maxw);


// Q_PROPERTY(int              maximumHeight
//            READ             maximumHeight      WRITE      setMaximumHeight
//            STORED           false
//            DESIGNABLE       false)
              int              maximumHeight() const;
              void          setMaximumHeight(int maxh);


// Q_PROPERTY(int   width    READ   width)
    inline    int   width() const;

// Q_PROPERTY(int   height   READ   height)
    inline    int   height() const;

// Q_PROPERTY(int   x        READ    x)
              int   x() const;

// Q_PROPERTY(int   y        READ    y)
              int   y() const;

// Q_PROPERTY(QPoint    pos
//            READ      pos   WRITE    move
//            DESIGNABLE      false    STORED   false)
              QPoint    pos() const;
              void      move(int x, int y);
              void      move(const QPoint &);

protected : //从保护、公共到槽函数,修改窗体的成员函,结合起来看,学习
    void initPainter(QPainter * painter) const override;

    void create(WId = 0,    bool initializeWindow = true,
                            bool destroyOldWindow = true);

    void destroy(bool destroyWindow = true,  bool destroySubWindows = true);

public  :
    inline
    void update(int x, int y, int w, int h);
    void update(const QRect   &);
    void update(const QRegion &);

    void repaint(int x, int y, int w, int h);
    void repaint(const QRect   &);
    void repaint(const QRegion &);

protected Q_SLOTS:
    void updateMicroFocus(Qt::InputMethodQuery query = Qt::ImQueryAll);

public Q_SLOTS:
    void update ();
    void repaint();

    //void show();
    //void hide();
    //bool close();
    void raise();
    void lower();

    //  void showMinimized();
    //  void showMaximized();
    //  void showFullScreen();
        void showNormal();

    //        void    setDisabled      (bool);
    //        void    setEnabled       (bool);
    //        void    setWindowTitle   (const QString &);
    //virtual void    setVisible       (bool visible);
    //        void    setStyleSheet    (const QString & styleSheet);
    //        void    setHidden        (bool hidden);
    //        void    setWindowModified(bool);
    //inline  void    setFocus         () { setFocus(Qt::OtherFocusReason); }

Q_SIGNALS:
    //void    windowTitleChanged     (const QString & title);
    //void     windowIconChanged     (const QIcon   & icon);
    //void windowIconTextChanged     (const QString & iconText);
    void   customContextMenuRequested(const QPoint  & pos);

public:
    QStyle   *     style() const;
    void        setStyle(QStyle *);

    QLayout  *    layout() const;
    void       setLayout(QLayout *);

    QScreen  *    screen() const;
    void       setScreen(QScreen *);

            WId               winId() const;
    inline  WId       internalWinId() const { return data->winid; }
            WId      effectiveWinId() const;
            void        createWinId(); // internal, going away


    QString                       windowRole() const;
    void                       setWindowRole(const QString &);

    QPalette::ColorRole       backgroundRole() const;
    void                   setBackgroundRole(QPalette::ColorRole);

    QPalette::ColorRole       foregroundRole() const;
    void                   setForegroundRole(QPalette::ColorRole);

    QGraphicsEffect      *    graphicsEffect() const;
    void                   setGraphicsEffect(QGraphicsEffect * effect);
    QGraphicsProxyWidget *    graphicsProxyWidget() const;

    QRegion       mask() const;
    void       setMask(const QBitmap &);
    void       setMask(const QRegion &);
    void     clearMask();

    //enum Qt::WindowState { WindowMinimized, WindowMaximized, WindowFullScreen ... };
    Qt::WindowStates           windowState() const;
    void                    setWindowState(Qt::WindowStates state);
    void               overrideWindowState(Qt::WindowStates state);

    QMargins       contentsMargins() const;
    void        setContentsMargins(int left, int top, int right, int bottom);
    void        setContentsMargins(const QMargins & margins);

    inline  bool      testAttribute(Qt::WidgetAttribute) const;
            void       setAttribute(Qt::WidgetAttribute, bool on = true);

    bool    isAncestorOf(const QWidget * child) const;
    void    setParent   (QWidget * parent);
    void    setParent   (QWidget * parent, Qt::WindowFlags f);


    QList<QAction *>       actions() const;
    void             insertAction (QAction * before, QAction * action);
    void             insertActions(QAction * before, const QList<QAction *> & actions);
    void                addActions(                  const QList<QAction *> & actions);
    void                addAction (                  QAction * action);
    void             removeAction (                  QAction * action);


    Q_INVOKABLE   QPixmap   grab(const QRect & rectangle = QRect(QPoint(0, 0),
                                QSize(-1, -1)));
    void                    grabGesture(Qt::GestureType  type,
                                Qt::GestureFlags flags = Qt::GestureFlags());
    void                  ungrabGesture(Qt::GestureType  type);


    static QWidget *   mouseGrabber  (); //关于鼠标
    void                    grabMouse();
    void                    grabMouse(const QCursor &);
    void                 releaseMouse();

    static QWidget * keyboardGrabber (); //关于键盘
    void                     grabKeyboard();
    void                  releaseKeyboard();

    int             grabShortcut(const QKeySequence & key, //快捷键
                    Qt::ShortcutContext  context = Qt::WindowShortcut);
    void         releaseShortcut(int id);
    void             setShortcutEnabled   (int id, bool enable = true);
    void             setShortcutAutoRepeat(int id, bool enable = true);


            bool underMouse   () const;
    inline  bool isRightToLeft() const { return layoutDirection() == Qt::RightToLeft; }
    inline  bool isLeftToRight() const { return layoutDirection() == Qt::LeftToRight; }

            bool                      isWindow() const;
            QWidget *                   window() const;
            QWindow *                   windowHandle() const;
            QWidget *             parentWidget() const;
            QWidget *       nativeParentWidget() const;
    inline  QWidget *           topLevelWidget() const { return window(); }
            QWidget *              focusWidget() const;
            QWidget *        nextInFocusChain () const;
            QWidget *    previousInFocusChain () const;
    static  QWidget *                     find(WId);
    inline  QWidget *                  childAt(int x, int y) const;
            QWidget *                  childAt(const QPoint & p) const;
    static  QWidget *    createWindowContainer(QWindow * window,
                                            QWidget    * parent=nullptr,
                                            Qt::WindowFlags flags = Qt::WindowFlags());


    QPointF mapTo      (const QWidget *, const QPointF &) const;
    QPoint  mapTo      (const QWidget *, const QPoint  &) const;
    QPointF mapToGlobal(const QPointF &) const;
    QPoint  mapToGlobal(const QPoint  &) const;
    QPointF mapToParent(const QPointF &) const;
    QPoint  mapToParent(const QPoint  &) const;

    QPointF mapFrom      (const QWidget *, const QPointF &) const;
    QPoint  mapFrom      (const QWidget *, const QPoint  &) const;
    QPointF mapFromGlobal(const QPointF &) const;
    QPoint  mapFromGlobal(const QPoint  &) const;
    QPointF mapFromParent(const QPointF &) const;
    QPoint  mapFromParent(const QPoint  &) const;

    int                       devType() const override;
    inline Qt::WindowType  windowType() const;

    QBackingStore        * backingStore       () const;
    QPaintEngine         * paintEngine        () const override; //以下开始各种写函数

    void activateWindow();
    void stackUnder    (QWidget *);
    void adjustSize    ();
    void ensurePolished() const;

    void scroll(int dx, int dy);
    void scroll(int dx, int dy, const QRect &);

    static  void setTabOrder   (QWidget *, QWidget *);
            void setFixedSize  (const QSize &);
            void setFixedSize  (int w, int  h);
            void setFixedWidth (int w);
            void setFixedHeight(int h);


    void render(QPaintDevice  * target,
                const QPoint  & targetOffset = QPoint (),
                const QRegion & sourceRegion = QRegion(),
        RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren));

    void render(QPainter      * painter,
                const QPoint  & targetOffset = QPoint(),
                const QRegion & sourceRegion = QRegion(),
        RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren));


protected:  // Event handlers
    bool                         event(QEvent            * event) override;
    virtual void       mousePressEvent(QMouseEvent       * event);
    virtual void     mouseReleaseEvent(QMouseEvent       * event);
    virtual void mouseDoubleClickEvent(QMouseEvent       * event);
    virtual void        mouseMoveEvent(QMouseEvent       * event);
    virtual void            wheelEvent(QWheelEvent       * event);
    virtual void         keyPressEvent(QKeyEvent         * event);
    virtual void       keyReleaseEvent(QKeyEvent         * event);
    virtual void          focusInEvent(QFocusEvent       * event);
    virtual void         focusOutEvent(QFocusEvent       * event);
    virtual void            enterEvent(QEnterEvent       * event);
    virtual void            leaveEvent(QEvent            * event);
    virtual void            paintEvent(QPaintEvent       * event);
    virtual void             moveEvent(QMoveEvent        * event);
    virtual void           resizeEvent(QResizeEvent      * event);
    virtual void            closeEvent(QCloseEvent       * event);
    virtual void      contextMenuEvent(QContextMenuEvent * event);
    virtual void           tabletEvent(QTabletEvent      * event);
    virtual void           actionEvent(QActionEvent      * event);
    virtual void        dragEnterEvent(QDragEnterEvent   * event);
    virtual void         dragMoveEvent(QDragMoveEvent    * event);
    virtual void        dragLeaveEvent(QDragLeaveEvent   * event);
    virtual void             dropEvent(QDropEvent        * event);
    virtual void             showEvent(QShowEvent        * event);
    virtual void             hideEvent(QHideEvent        * event);
    virtual void           changeEvent(QEvent            *      );
    virtual bool           nativeEvent(const QByteArray & eventType, void * message,
                                        qintptr * result);
    virtual void      inputMethodEvent(QInputMethodEvent *      );
public:
    virtual QVariant  inputMethodQuery(Qt::InputMethodQuery) const;

protected:
    friend class QDataWidgetMapperPrivate; // for access to focusNextPrevChild
    virtual bool focusNextPrevChild(bool next);
    inline  bool focusNextChild()     { return focusNextPrevChild(true ); }
    inline  bool focusPreviousChild() { return focusNextPrevChild(false); }

    int            metric       (PaintDeviceMetric)  const override;
    QPaintDevice * redirected   (QPoint * offset)    const override;
    QPainter     * sharedPainter()                   const override;


}; //完结 class QWidget : public QObject, public QPaintDevice
Q_DECLARE_OPERATORS_FOR_FLAGS(QWidget::RenderFlags)

QT_END_NAMESPACE

#endif // QWIDGET_H


(3)补充本类里关于尺寸坐标大小方面的属性知识

class QWidget : public QObject 
{
    //This property holds the geometry of the widget relative to its parent and
    //  excluding the window frame When changing the geometry。
    //此属性表示小部件相对于其父级和排除窗口框架的几何形状。
    //在更改几何形状时,该小部件(如果可见)会立即接收到一个移动事件(moveEvent()),
    //  和/或一个缩放事件(resizeEvent())。
    //如果该小部件当前不可见,那么在显示之前它必定会接收到相应的事件。
    //如果大小组件位于由minimumSize()和maximumSize()定义的范围之外,则会进行调整。
    //警告:在resizeEvent()或moveEvent()中调用setGeometry()可能会导致无限递归。
    //默认情况下,此属性包含一个取决于用户平台和屏幕几何形状的值。
    //class QRect { int x1; int y1; int x2; int y2; };
    Q_PROPERTY(QRect           geometry
                READ           geometry      WRITE      setGeometry)

    Q_PROPERTY(QRect      frameGeometry      READ     frameGeometry) //包含边框
    //geometry of the widget relative to its parent including any window frame。

    Q_PROPERTY(QRect     normalGeometry      READ    normalGeometry)
    //此属性保存了当作为正常(未最大化或全屏)顶级窗口显示时的控件几何形状。
    //如果小部件已经处于此状态,则正常几何将反映小部件当前的geometry()。
    //对于子小部件,此属性始终保持一个空矩形。默认情况下,此属性包含一个空矩形。

    Q_PROPERTY(QRect               rect      READ              rect)
    //This property holds the
    //  internal geometry of the widget excluding any window frame。
    //The rect property equals QRect(0, 0, width(), height()).
    //此属性包含小部件的内部几何形状,不包括任何窗口框架。
    //rect 属性等于 QRect(0,0,宽度(),高度()。
    //class QRect { int x1; int y1; int x2; int y2; };

    //This property holds the bounding rectangle of the widget's children,
    //Hidden children are excluded.
    //此属性持有小部件子元素的边界矩形。      隐藏的子项被排除在外。
    //默认情况下,对于没有子项的控件,此属性包含一个位于原点处、宽度和高度均为零的矩形。
    Q_PROPERTY(QRect       childrenRect      READ      childrenRect)

    Q_PROPERTY(QRegion     childrenRegion    READ      childrenRegion)
    //class QRegion { struct QRegionData * d; };
    //此属性持有小部件子元素所占据的组合区域。 隐藏的子项被排除在外。
    //默认情况下,对于没有子项的控件,此属性包含一个空区域。

    //This property holds the size of the widget including any window frame。
    //此属性表示包含任何窗口框架的组件大小。   class QSize { int wd; int ht; };
    Q_PROPERTY(QSize         frameSize       READ      frameSize)

    Q_PROPERTY(QSize              size       //不包含本组件的边框
                READ              size       WRITE        resize
                DESIGNABLE        false      STORED       false)
    //This property holds the size of the widget excluding any window frame。
    //此属性表示不包括任何窗口框架的控件大小。
    //如果该小部件在调整大小时被可见,它将立即接收到一个调整大小事件(resizeEvent())。
    //如果该小部件当前不可见,那么在显示之前它必定会接收到一个事件。
    //如果大小超出由minimumSize()和maximumSize()定义的范围,则会调整其大小。
    //默认情况下,此属性包含一个依赖于用户平台和屏幕几何形状的值。
    // ! 警告:在resizeEvent()中调用resize()或setGeometry()可能会导致无限递归。
    //注意:将大小设置为QSize(0,0)会导致小部件在屏幕上不显示。这同样适用于窗口。

    Q_PROPERTY(QSize              sizeHint    READ       sizeHint)

    //这个属性持有小部件的尺寸增量。当用户调整窗口大小时,大小将以
    //sizelncrement().width()像素的水平增量和sizelncrement()height()像素的垂直增量移动,
    //以 baseSize()为基础。首选小部件大小是非负整数i和 j。
    //请注意,虽然您可以设置所有小部件的大小增量,但它只影响窗口。
    //默认情况下,此属性包含宽度为0、高度为0的尺寸。
    //警告:在 Windows 下,大小增量没有影响,X11的窗口管理器可能会忽略它。
    //机器翻译时,总把 Widget 翻译成小部件,把  window 翻译成窗口。这可能不大准确。
    Q_PROPERTY(QSize              sizeIncrement
                READ              sizeIncrement
                WRITE          setSizeIncrement)

    Q_PROPERTY(QSize          baseSize
                READ          baseSize        WRITE      setBaseSize)
    //此属性表示小部件的基本大小。
    //基底尺寸用于计算合适的组件大小,如果组件定义了sizelncrement()。
    //默认情况下,对于新创建的控件,此属性包含一个宽度和高度均为零的尺寸。

    //此属性表示不包括任何窗口框架的组件宽度。
    //This property holds the width of the widget excluding any window frame。
    Q_PROPERTY(int   width    READ   width)

    Q_PROPERTY(int   height   READ   height)
    //This property holds the height of the widget excluding any window frame.
    //此属性表示不包括任何窗口框架的组件高度。
    //默认情况下,此属性包含一个取决于用户平台和屏幕几何形状的值。

    //此属性表示小部件相对于其父级(包括任何窗口框架)的x坐标。默认情况下,此属性的值为0。
    Q_PROPERTY(int   x        READ    x)

    Q_PROPERTY(int   y        READ    y) //坐标信息包含自己的边框
    //This property holds the y coordinate of the
    //  widget relative to its parent and including any window frame.

    Q_PROPERTY(QPoint   pos   //包含本组件的边框后的坐标。
                READ    pos   WRITE   move
                DESIGNABLE   false    STORED   false)
    //此属性表示小部件在其父小部件中的位置。
    //如果小部件是窗口,其位置是指小部件在桌面上的位置,包括其框架。
    //在改变位置时,如果该小部件可见,它将立即接收到移动事件(moveEvent())。
    //如果该小部件当前不可见,那么在显示之前它必定会接收到一个事件。
    //默认情况下,此属性包含一个引用原点的位置。
    //警告:在moveEvent()中调用move()或setGeometry()可能会导致无限递归。

}

++测试一下,先拿标签来测试

在这里插入图片描述

++

在这里插入图片描述

++

在这里插入图片描述

++测试结果 ;

在这里插入图片描述

(4)换成 QFrame 这一正宗的带边框容器,测试一下

在这里插入图片描述

++ 测试代码

void MainWindow::on_pushButton_2_clicked()
{
    qDebug() << "------以下是带标题栏的窗体数据------------";
    qDebug() << "x     ()         :" << x();
    qDebug() << "y     ()         :" << y();
    qDebug() << "pos   ()         :" << pos();
    qDebug() << "width ()         :" << width();
    qDebug() << "height()         :" << height();
    qDebug() << "****************************";
    qDebug() << "     size()      :" << size();
    qDebug() << "frameSize()      :" << frameSize();
    qDebug() << " baseSize()      :" << baseSize();
    qDebug() << "sizeIncrement()  :" << sizeIncrement();
    qDebug() << "sizeHint()       :" << sizeHint();
    qDebug() << "****************************";
    qDebug() << "        rect()   :" << rect();
    qDebug() << "childrenRect()   :" << childrenRect();
    qDebug() << "childrenRegion() :" << childrenRegion();
    qDebug() << "****************************";
    qDebug() << "      geometry() :" << geometry();
    qDebug() << " frameGeometry() :" << frameGeometry();
    qDebug() << "normalGeometry() :" << normalGeometry();
    qDebug() << "-------以下是外部 QFrame----------";
    qDebug() << "x     ()         :" << ui->frame->x();
    qDebug() << "y     ()         :" << ui->frame->y();
    qDebug() << "pos   ()         :" << ui->frame->pos();
    qDebug() << "width ()         :" << ui->frame->width();
    qDebug() << "height()         :" << ui->frame->height();
    qDebug() << "****************************";
    qDebug() << "     size()      :" << ui->frame->size();
    qDebug() << "frameSize()      :" << ui->frame->frameSize();
    qDebug() << " baseSize()      :" << ui->frame->baseSize();
    qDebug() << "sizeIncrement()  :" << ui->frame->sizeIncrement();
    qDebug() << "sizeHint()       :" << ui->frame->sizeHint();
    qDebug() << "****************************";
    qDebug() << "        rect()   :" << ui->frame->rect();
    qDebug() << "childrenRect()   :" << ui->frame->childrenRect();
    qDebug() << "childrenRegion() :" << ui->frame->childrenRegion();
    qDebug() << "****************************";
    qDebug() << "      geometry() :" << ui->frame->geometry();
    qDebug() << " frameGeometry() :" << ui->frame->frameGeometry();
    qDebug() << "normalGeometry() :" << ui->frame->normalGeometry();
    qDebug() << "-------以下是内部 QFrame-----------";
    qDebug() << "x     ()         :" << ui->frame_2->x();
    qDebug() << "y     ()         :" << ui->frame_2->y();
    qDebug() << "pos   ()         :" << ui->frame_2->pos();
    qDebug() << "width ()         :" << ui->frame_2->width();
    qDebug() << "height()         :" << ui->frame_2->height();
    qDebug() << "****************************";
    qDebug() << "     size()      :" << ui->frame_2->size();
    qDebug() << "frameSize()      :" << ui->frame_2->frameSize();
    qDebug() << " baseSize()      :" << ui->frame_2->baseSize();
    qDebug() << "sizeIncrement()  :" << ui->frame_2->sizeIncrement();
    qDebug() << "sizeHint()       :" << ui->frame_2->sizeHint();
    qDebug() << "****************************";
    qDebug() << "        rect()   :" << ui->frame_2->rect();
    qDebug() << "childrenRect()   :" << ui->frame_2->childrenRect();
    qDebug() << "childrenRegion() :" << ui->frame_2->childrenRegion();
    qDebug() << "****************************";
    qDebug() << "      geometry() :" << ui->frame_2->geometry();
    qDebug() << " frameGeometry() :" << ui->frame_2->frameGeometry();
    qDebug() << "normalGeometry() :" << ui->frame_2->normalGeometry();
    qDebug() << "------以下是最里面的标签------------";
    qDebug() << "x     ()         :" << ui->label->x();
    qDebug() << "y     ()         :" << ui->label->y();
    qDebug() << "pos   ()         :" << ui->label->pos();
    qDebug() << "width ()         :" << ui->label->width();
    qDebug() << "height()         :" << ui->label->height();
    qDebug() << "****************************";
    qDebug() << "     size()      :" << ui->label->size();
    qDebug() << "frameSize()      :" << ui->label->frameSize();
    qDebug() << " baseSize()      :" << ui->label->baseSize();
    qDebug() << "sizeIncrement()  :" << ui->label->sizeIncrement();
    qDebug() << "sizeHint()       :" << ui->label->sizeHint();
    qDebug() << "****************************";
    qDebug() << "        rect()   :" << ui->label->rect();
    qDebug() << "childrenRect()   :" << ui->label->childrenRect();
    qDebug() << "childrenRegion() :" << ui->label->childrenRegion();
    qDebug() << "****************************";
    qDebug() << "      geometry() :" << ui->label->geometry();
    qDebug() << " frameGeometry() :" << ui->label->frameGeometry();
    qDebug() << "normalGeometry() :" << ui->label->normalGeometry();
}

++ 测试结果如下, 一开始把程序窗体放在屏幕的左上角

在这里插入图片描述

++外 QFrame 容器的这些成员函数的计算取值结果

在这里插入图片描述

++

在这里插入图片描述

++

在这里插入图片描述

++至此,以上这些测试,比较全面的了解了这些几何尺寸与坐标的成员函数的含义

(5)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhangzhangkeji

谢谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值