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
                READ       windowIconText   WRITE     setWindowIconText
                NOTIFY     windowIconTextChanged) // deprecated 废弃

    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)

    Q_PROPERTY(bool        acceptDrops
                READ       acceptDrops      WRITE      setAcceptDrops)

    Q_PROPERTY(bool        windowModified
                READ     isWindowModified   WRITE      setWindowModified)

    Q_PROPERTY(bool        autoFillBackground
                READ       autoFillBackground
                WRITE   setAutoFillBackground)

    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)

    Q_PROPERTY(Qt::FocusPolicy                 focusPolicy
                READ                           focusPolicy
                WRITE                       setFocusPolicy)

    Q_PROPERTY(QSizePolicy                      sizePolicy
                READ                            sizePolicy
                WRITE                        setSizePolicy)

    Q_PROPERTY(Qt::ContextMenuPolicy     contextMenuPolicy
                READ                     contextMenuPolicy
                WRITE                 setContextMenuPolicy)

    Q_PROPERTY(Qt::LayoutDirection       layoutDirection
                READ                     layoutDirection
                WRITE                 setLayoutDirection
                RESET               unsetLayoutDirection)

    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)

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


    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             insertActions(QAction * before, const QList<QAction *> & actions);
    void                addActions(                  const QList<QAction *> & actions);
    void             insertAction (QAction * before, QAction * action);
    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)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值