qwidget.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:36k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QWIDGET_H
  38. #define QWIDGET_H
  39. #include <QtGui/qwindowdefs.h>
  40. #include <QtCore/qobject.h>
  41. #include <QtGui/qpaintdevice.h>
  42. #include <QtGui/qpalette.h>
  43. #include <QtGui/qfont.h>
  44. #include <QtGui/qfontmetrics.h>
  45. #include <QtGui/qfontinfo.h>
  46. #include <QtGui/qsizepolicy.h>
  47. #include <QtGui/qregion.h>
  48. #include <QtGui/qbrush.h>
  49. #include <QtGui/qcursor.h>
  50. #include <QtGui/qkeysequence.h>
  51. #ifdef QT_INCLUDE_COMPAT
  52. #include <QtGui/qevent.h>
  53. #endif
  54. QT_BEGIN_HEADER
  55. QT_BEGIN_NAMESPACE
  56. QT_MODULE(Gui)
  57. class QLayout;
  58. class QWSRegionManager;
  59. class QStyle;
  60. class QAction;
  61. class QVariant;
  62. class QActionEvent;
  63. class QMouseEvent;
  64. class QWheelEvent;
  65. class QHoverEvent;
  66. class QKeyEvent;
  67. class QFocusEvent;
  68. class QPaintEvent;
  69. class QMoveEvent;
  70. class QResizeEvent;
  71. class QCloseEvent;
  72. class QContextMenuEvent;
  73. class QInputMethodEvent;
  74. class QTabletEvent;
  75. class QDragEnterEvent;
  76. class QDragMoveEvent;
  77. class QDragLeaveEvent;
  78. class QDropEvent;
  79. class QShowEvent;
  80. class QHideEvent;
  81. class QInputContext;
  82. class QIcon;
  83. class QWindowSurface;
  84. class QLocale;
  85. #if defined(Q_WS_X11)
  86. class QX11Info;
  87. #endif
  88. class QWidgetData
  89. {
  90. public:
  91.     WId winid;
  92.     uint widget_attributes;
  93.     Qt::WindowFlags window_flags;
  94.     uint window_state : 4;
  95.     uint focus_policy : 4;
  96.     uint sizehint_forced :1;
  97.     uint is_closing :1;
  98.     uint in_show : 1;
  99.     uint in_set_window_state : 1;
  100.     mutable uint fstrut_dirty : 1;
  101.     uint context_menu_policy : 3;
  102.     uint window_modality : 2;
  103.     uint in_destructor : 1;
  104.     uint unused : 13;
  105.     QRect crect;
  106.     mutable QPalette pal;
  107.     QFont fnt;
  108. #if defined(Q_WS_QWS)
  109. //    QRegion req_region;                 // Requested region
  110. //     mutable QRegion paintable_region;   // Paintable region
  111. //     mutable bool paintable_region_dirty;// needs to be recalculated
  112. //     mutable QRegion alloc_region;       // Allocated region
  113. //     mutable bool alloc_region_dirty;    // needs to be recalculated
  114. //     mutable int overlapping_children;   // Handle overlapping children
  115.     int alloc_region_index;
  116. //    int alloc_region_revision;
  117. #endif
  118. #if defined(Q_OS_WINCE)
  119.     uint window_state_internal : 4;
  120. #endif
  121.     QRect wrect;
  122. };
  123. class QWidgetPrivate;
  124. class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
  125. {
  126.     Q_OBJECT
  127.     Q_DECLARE_PRIVATE(QWidget)
  128.     Q_PROPERTY(bool modal READ isModal)
  129.     Q_PROPERTY(Qt::WindowModality windowModality READ windowModality WRITE setWindowModality)
  130.     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
  131.     Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
  132.     Q_PROPERTY(QRect frameGeometry READ frameGeometry)
  133.     Q_PROPERTY(QRect normalGeometry READ normalGeometry)
  134.     Q_PROPERTY(int x READ x)
  135.     Q_PROPERTY(int y READ y)
  136.     Q_PROPERTY(QPoint pos READ pos WRITE move DESIGNABLE false STORED false)
  137.     Q_PROPERTY(QSize frameSize READ frameSize)
  138.     Q_PROPERTY(QSize size READ size WRITE resize DESIGNABLE false STORED false)
  139.     Q_PROPERTY(int width READ width)
  140.     Q_PROPERTY(int height READ height)
  141.     Q_PROPERTY(QRect rect READ rect)
  142.     Q_PROPERTY(QRect childrenRect READ childrenRect)
  143.     Q_PROPERTY(QRegion childrenRegion READ childrenRegion)
  144.     Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy)
  145.     Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize)
  146.     Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize)
  147.     Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth STORED false DESIGNABLE false)
  148.     Q_PROPERTY(int minimumHeight READ minimumHeight WRITE setMinimumHeight STORED false DESIGNABLE false)
  149.     Q_PROPERTY(int maximumWidth READ maximumWidth WRITE setMaximumWidth STORED false DESIGNABLE false)
  150.     Q_PROPERTY(int maximumHeight READ maximumHeight WRITE setMaximumHeight STORED false DESIGNABLE false)
  151.     Q_PROPERTY(QSize sizeIncrement READ sizeIncrement WRITE setSizeIncrement)
  152.     Q_PROPERTY(QSize baseSize READ baseSize WRITE setBaseSize)
  153.     Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
  154.     Q_PROPERTY(QFont font READ font WRITE setFont)
  155. #ifndef QT_NO_CURSOR
  156.     Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)
  157. #endif
  158.     Q_PROPERTY(bool mouseTracking READ hasMouseTracking WRITE setMouseTracking)
  159.     Q_PROPERTY(bool isActiveWindow READ isActiveWindow)
  160.     Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
  161.     Q_PROPERTY(bool focus READ hasFocus)
  162.     Q_PROPERTY(Qt::ContextMenuPolicy contextMenuPolicy READ contextMenuPolicy WRITE setContextMenuPolicy)
  163.     Q_PROPERTY(bool updatesEnabled READ updatesEnabled WRITE setUpdatesEnabled DESIGNABLE false)
  164.     Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false)
  165.     Q_PROPERTY(bool minimized READ isMinimized)
  166.     Q_PROPERTY(bool maximized READ isMaximized)
  167.     Q_PROPERTY(bool fullScreen READ isFullScreen)
  168.     Q_PROPERTY(QSize sizeHint READ sizeHint)
  169.     Q_PROPERTY(QSize minimumSizeHint READ minimumSizeHint)
  170.     Q_PROPERTY(bool acceptDrops READ acceptDrops WRITE setAcceptDrops)
  171.     Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle DESIGNABLE isWindow)
  172.     Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon DESIGNABLE isWindow)
  173.     Q_PROPERTY(QString windowIconText READ windowIconText WRITE setWindowIconText DESIGNABLE isWindow)
  174.     Q_PROPERTY(double windowOpacity READ windowOpacity WRITE setWindowOpacity DESIGNABLE isWindow)
  175.     Q_PROPERTY(bool windowModified READ isWindowModified WRITE setWindowModified DESIGNABLE isWindow)
  176. #ifndef QT_NO_TOOLTIP
  177.     Q_PROPERTY(QString toolTip READ toolTip WRITE setToolTip)
  178. #endif
  179. #ifndef QT_NO_STATUSTIP
  180.     Q_PROPERTY(QString statusTip READ statusTip WRITE setStatusTip)
  181. #endif
  182. #ifndef QT_NO_WHATSTHIS
  183.     Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis)
  184. #endif
  185. #ifndef QT_NO_ACCESSIBILITY
  186.     Q_PROPERTY(QString accessibleName READ accessibleName WRITE setAccessibleName)
  187.     Q_PROPERTY(QString accessibleDescription READ accessibleDescription WRITE setAccessibleDescription)
  188. #endif
  189.     Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection RESET unsetLayoutDirection)
  190.     QDOC_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)
  191.     Q_PROPERTY(bool autoFillBackground READ autoFillBackground WRITE setAutoFillBackground)
  192. #ifndef QT_NO_STYLE_STYLESHEET
  193.     Q_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet)
  194. #endif
  195.     Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET unsetLocale)
  196.     Q_PROPERTY(QString windowFilePath READ windowFilePath WRITE setWindowFilePath DESIGNABLE isWindow)
  197. public:
  198.     enum RenderFlag {
  199.         DrawWindowBackground = 0x1,
  200.         DrawChildren = 0x2,
  201.         IgnoreMask = 0x4
  202.     };
  203.     Q_DECLARE_FLAGS(RenderFlags, RenderFlag)
  204.     explicit QWidget(QWidget* parent = 0, Qt::WindowFlags f = 0);
  205. #ifdef QT3_SUPPORT
  206.     QT3_SUPPORT_CONSTRUCTOR QWidget(QWidget* parent, const char *name, Qt::WindowFlags f = 0);
  207. #endif
  208.     ~QWidget();
  209.     int devType() const;
  210.     WId winId() const;
  211.     void createWinId(); // internal, going away
  212.     inline WId internalWinId() const { return data->winid; }
  213.     WId effectiveWinId() const;
  214.     // GUI style setting
  215.     QStyle *style() const;
  216.     void setStyle(QStyle *);
  217.     // Widget types and states
  218.     bool isTopLevel() const;
  219.     bool isWindow() const;
  220.     bool isModal() const;
  221.     Qt::WindowModality windowModality() const;
  222.     void setWindowModality(Qt::WindowModality windowModality);
  223.     bool isEnabled() const;
  224.     bool isEnabledTo(QWidget*) const;
  225.     bool isEnabledToTLW() const;
  226. public Q_SLOTS:
  227.     void setEnabled(bool);
  228.     void setDisabled(bool);
  229.     void setWindowModified(bool);
  230.     // Widget coordinates
  231. public:
  232.     QRect frameGeometry() const;
  233.     const QRect &geometry() const;
  234.     QRect normalGeometry() const;
  235.     int x() const;
  236.     int y() const;
  237.     QPoint pos() const;
  238.     QSize frameSize() const;
  239.     QSize size() const;
  240.     inline int width() const;
  241.     inline int height() const;
  242.     inline QRect rect() const;
  243.     QRect childrenRect() const;
  244.     QRegion childrenRegion() const;
  245.     QSize minimumSize() const;
  246.     QSize maximumSize() const;
  247.     int minimumWidth() const;
  248.     int minimumHeight() const;
  249.     int maximumWidth() const;
  250.     int maximumHeight() const;
  251.     void setMinimumSize(const QSize &);
  252.     void setMinimumSize(int minw, int minh);
  253.     void setMaximumSize(const QSize &);
  254.     void setMaximumSize(int maxw, int maxh);
  255.     void setMinimumWidth(int minw);
  256.     void setMinimumHeight(int minh);
  257.     void setMaximumWidth(int maxw);
  258.     void setMaximumHeight(int maxh);
  259.     QSize sizeIncrement() const;
  260.     void setSizeIncrement(const QSize &);
  261.     void setSizeIncrement(int w, int h);
  262.     QSize baseSize() const;
  263.     void setBaseSize(const QSize &);
  264.     void setBaseSize(int basew, int baseh);
  265.     void setFixedSize(const QSize &);
  266.     void setFixedSize(int w, int h);
  267.     void setFixedWidth(int w);
  268.     void setFixedHeight(int h);
  269.     // Widget coordinate mapping
  270.     QPoint mapToGlobal(const QPoint &) const;
  271.     QPoint mapFromGlobal(const QPoint &) const;
  272.     QPoint mapToParent(const QPoint &) const;
  273.     QPoint mapFromParent(const QPoint &) const;
  274.     QPoint mapTo(QWidget *, const QPoint &) const;
  275.     QPoint mapFrom(QWidget *, const QPoint &) const;
  276.     QWidget *window() const;
  277.     QWidget *nativeParentWidget() const;
  278.     inline QWidget *topLevelWidget() const { return window(); }
  279.     // Widget appearance functions
  280.     const QPalette &palette() const;
  281.     void setPalette(const QPalette &);
  282.     void setBackgroundRole(QPalette::ColorRole);
  283.     QPalette::ColorRole backgroundRole() const;
  284.     void setForegroundRole(QPalette::ColorRole);
  285.     QPalette::ColorRole foregroundRole() const;
  286.     const QFont &font() const;
  287.     void setFont(const QFont &);
  288.     QFontMetrics fontMetrics() const;
  289.     QFontInfo fontInfo() const;
  290. #ifndef QT_NO_CURSOR
  291.     QCursor cursor() const;
  292.     void setCursor(const QCursor &);
  293.     void unsetCursor();
  294. #endif
  295.     void setMouseTracking(bool enable);
  296.     bool hasMouseTracking() const;
  297.     bool underMouse() const;
  298.     void setMask(const QBitmap &);
  299.     void setMask(const QRegion &);
  300.     QRegion mask() const;
  301.     void clearMask();
  302.     void render(QPaintDevice *target, const QPoint &targetOffset = QPoint(),
  303.                 const QRegion &sourceRegion = QRegion(),
  304.                 RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren));
  305.     void render(QPainter *painter, const QPoint &targetOffset = QPoint(),
  306.                 const QRegion &sourceRegion = QRegion(),
  307.                 RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren));
  308. public Q_SLOTS:
  309.     void setWindowTitle(const QString &);
  310. #ifndef QT_NO_STYLE_STYLESHEET
  311.     void setStyleSheet(const QString& styleSheet);
  312. #endif
  313. public:
  314. #ifndef QT_NO_STYLE_STYLESHEET
  315.     QString styleSheet() const;
  316. #endif
  317.     QString windowTitle() const;
  318.     void setWindowIcon(const QIcon &icon);
  319.     QIcon windowIcon() const;
  320.     void setWindowIconText(const QString &);
  321.     QString windowIconText() const;
  322.     void setWindowRole(const QString &);
  323.     QString windowRole() const;
  324.     void setWindowFilePath(const QString &filePath);
  325.     QString windowFilePath() const;
  326.     void setWindowOpacity(qreal level);
  327.     qreal windowOpacity() const;
  328.     bool isWindowModified() const;
  329. #ifndef QT_NO_TOOLTIP
  330.     void setToolTip(const QString &);
  331.     QString toolTip() const;
  332. #endif
  333. #ifndef QT_NO_STATUSTIP
  334.     void setStatusTip(const QString &);
  335.     QString statusTip() const;
  336. #endif
  337. #ifndef QT_NO_WHATSTHIS
  338.     void setWhatsThis(const QString &);
  339.     QString whatsThis() const;
  340. #endif
  341. #ifndef QT_NO_ACCESSIBILITY
  342.     QString accessibleName() const;
  343.     void setAccessibleName(const QString &name);
  344.     QString accessibleDescription() const;
  345.     void setAccessibleDescription(const QString &description);
  346. #endif
  347.     void setLayoutDirection(Qt::LayoutDirection direction);
  348.     Qt::LayoutDirection layoutDirection() const;
  349.     void unsetLayoutDirection();
  350.     void setLocale(const QLocale &locale);
  351.     QLocale locale() const;
  352.     void unsetLocale();
  353.     inline bool isRightToLeft() const { return layoutDirection() == Qt::RightToLeft; }
  354.     inline bool isLeftToRight() const { return layoutDirection() == Qt::LeftToRight; }
  355. public Q_SLOTS:
  356.     inline void setFocus() { setFocus(Qt::OtherFocusReason); }
  357. public:
  358.     bool isActiveWindow() const;
  359.     void activateWindow();
  360.     void clearFocus();
  361.     void setFocus(Qt::FocusReason reason);
  362.     Qt::FocusPolicy focusPolicy() const;
  363.     void setFocusPolicy(Qt::FocusPolicy policy);
  364.     bool hasFocus() const;
  365.     static void setTabOrder(QWidget *, QWidget *);
  366.     void setFocusProxy(QWidget *);
  367.     QWidget *focusProxy() const;
  368.     Qt::ContextMenuPolicy contextMenuPolicy() const;
  369.     void setContextMenuPolicy(Qt::ContextMenuPolicy policy);
  370.     // Grab functions
  371.     void grabMouse();
  372. #ifndef QT_NO_CURSOR
  373.     void grabMouse(const QCursor &);
  374. #endif
  375.     void releaseMouse();
  376.     void grabKeyboard();
  377.     void releaseKeyboard();
  378. #ifndef QT_NO_SHORTCUT
  379.     int grabShortcut(const QKeySequence &key, Qt::ShortcutContext context = Qt::WindowShortcut);
  380.     void releaseShortcut(int id);
  381.     void setShortcutEnabled(int id, bool enable = true);
  382.     void setShortcutAutoRepeat(int id, bool enable = true);
  383. #endif
  384.     static QWidget *mouseGrabber();
  385.     static QWidget *keyboardGrabber();
  386.     // Update/refresh functions
  387.     inline bool updatesEnabled() const;
  388.     void setUpdatesEnabled(bool enable);
  389. #if 0 //def Q_WS_QWS
  390.     void repaintUnclipped(const QRegion &, bool erase = true);
  391. #endif
  392. public Q_SLOTS:
  393.     void update();
  394.     void repaint();
  395. public:
  396.     inline void update(int x, int y, int w, int h);
  397.     void update(const QRect&);
  398.     void update(const QRegion&);
  399.     void repaint(int x, int y, int w, int h);
  400.     void repaint(const QRect &);
  401.     void repaint(const QRegion &);
  402. public Q_SLOTS:
  403.     // Widget management functions
  404.     virtual void setVisible(bool visible);
  405.     inline void setHidden(bool hidden) { setVisible(!hidden); }
  406. #ifndef Q_OS_WINCE
  407.     inline void show() { setVisible(true); }
  408. #else
  409.     void show();
  410. #endif
  411.     inline void hide() { setVisible(false); }
  412.     inline QT_MOC_COMPAT void setShown(bool shown) { setVisible(shown); }
  413.     void showMinimized();
  414.     void showMaximized();
  415.     void showFullScreen();
  416.     void showNormal();
  417.     bool close();
  418.     void raise();
  419.     void lower();
  420. public:
  421.     void stackUnder(QWidget*);
  422.     void move(int x, int y);
  423.     void move(const QPoint &);
  424.     void resize(int w, int h);
  425.     void resize(const QSize &);
  426.     inline void setGeometry(int x, int y, int w, int h);
  427.     void setGeometry(const QRect &);
  428.     QByteArray saveGeometry() const;
  429.     bool restoreGeometry(const QByteArray &geometry);
  430.     void adjustSize();
  431.     bool isVisible() const;
  432.     bool isVisibleTo(QWidget*) const;
  433.     // ### Qt 5: bool isVisibleTo(_const_ QWidget *) const
  434.     inline bool isHidden() const;
  435.     bool isMinimized() const;
  436.     bool isMaximized() const;
  437.     bool isFullScreen() const;
  438.     Qt::WindowStates windowState() const;
  439.     void setWindowState(Qt::WindowStates state);
  440.     void overrideWindowState(Qt::WindowStates state);
  441.     virtual QSize sizeHint() const;
  442.     virtual QSize minimumSizeHint() const;
  443.     QSizePolicy sizePolicy() const;
  444.     void setSizePolicy(QSizePolicy);
  445.     inline void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical);
  446.     virtual int heightForWidth(int) const;
  447.     QRegion visibleRegion() const;
  448.     void setContentsMargins(int left, int top, int right, int bottom);
  449.     void getContentsMargins(int *left, int *top, int *right, int *bottom) const;
  450.     QRect contentsRect() const;
  451. public:
  452.     QLayout *layout() const;
  453.     void setLayout(QLayout *);
  454.     void updateGeometry();
  455.     void setParent(QWidget *parent);
  456.     void setParent(QWidget *parent, Qt::WindowFlags f);
  457.     void scroll(int dx, int dy);
  458.     void scroll(int dx, int dy, const QRect&);
  459.     // Misc. functions
  460.     QWidget *focusWidget() const;
  461.     QWidget *nextInFocusChain() const;
  462.     // drag and drop
  463.     bool acceptDrops() const;
  464.     void setAcceptDrops(bool on);
  465. #ifndef QT_NO_ACTION
  466.     //actions
  467.     void addAction(QAction *action);
  468.     void addActions(QList<QAction*> actions);
  469.     void insertAction(QAction *before, QAction *action);
  470.     void insertActions(QAction *before, QList<QAction*> actions);
  471.     void removeAction(QAction *action);
  472.     QList<QAction*> actions() const;
  473. #endif
  474.     QWidget *parentWidget() const;
  475.     void setWindowFlags(Qt::WindowFlags type);
  476.     inline Qt::WindowFlags windowFlags() const;
  477.     void overrideWindowFlags(Qt::WindowFlags type);
  478.     inline Qt::WindowType windowType() const;
  479.     static QWidget *find(WId);
  480. #ifdef QT3_SUPPORT
  481.     static QT3_SUPPORT QWidgetMapper *wmapper();
  482. #endif
  483.     inline QWidget *childAt(int x, int y) const;
  484.     QWidget *childAt(const QPoint &p) const;
  485. #if defined(Q_WS_X11)
  486.     const QX11Info &x11Info() const;
  487.     Qt::HANDLE x11PictureHandle() const;
  488. #endif
  489. #if defined(Q_WS_MAC)
  490.     Qt::HANDLE macQDHandle() const;
  491.     Qt::HANDLE macCGHandle() const;
  492. #endif
  493. #if defined(Q_WS_WIN)
  494.     HDC getDC() const;
  495.     void releaseDC(HDC) const;
  496. #else
  497.     Qt::HANDLE handle() const;
  498. #endif
  499.     void setAttribute(Qt::WidgetAttribute, bool on = true);
  500.     inline bool testAttribute(Qt::WidgetAttribute) const;
  501.     QPaintEngine *paintEngine() const;
  502.     void ensurePolished() const;
  503.     QInputContext *inputContext();
  504.     void setInputContext(QInputContext *);
  505.     bool isAncestorOf(const QWidget *child) const;
  506. #ifdef QT_KEYPAD_NAVIGATION
  507.     bool hasEditFocus() const;
  508.     void setEditFocus(bool on);
  509. #endif
  510.     bool autoFillBackground() const;
  511.     void setAutoFillBackground(bool enabled);
  512.     void setWindowSurface(QWindowSurface *surface);
  513.     QWindowSurface *windowSurface() const;
  514. Q_SIGNALS:
  515.     void customContextMenuRequested(const QPoint &pos);
  516. protected:
  517.     // Event handlers
  518.     bool event(QEvent *);
  519.     virtual void mousePressEvent(QMouseEvent *);
  520.     virtual void mouseReleaseEvent(QMouseEvent *);
  521.     virtual void mouseDoubleClickEvent(QMouseEvent *);
  522.     virtual void mouseMoveEvent(QMouseEvent *);
  523. #ifndef QT_NO_WHEELEVENT
  524.     virtual void wheelEvent(QWheelEvent *);
  525. #endif
  526.     virtual void keyPressEvent(QKeyEvent *);
  527.     virtual void keyReleaseEvent(QKeyEvent *);
  528.     virtual void focusInEvent(QFocusEvent *);
  529.     virtual void focusOutEvent(QFocusEvent *);
  530.     virtual void enterEvent(QEvent *);
  531.     virtual void leaveEvent(QEvent *);
  532.     virtual void paintEvent(QPaintEvent *);
  533.     virtual void moveEvent(QMoveEvent *);
  534.     virtual void resizeEvent(QResizeEvent *);
  535.     virtual void closeEvent(QCloseEvent *);
  536. #ifndef QT_NO_CONTEXTMENU
  537.     virtual void contextMenuEvent(QContextMenuEvent *);
  538. #endif
  539. #ifndef QT_NO_TABLETEVENT
  540.     virtual void tabletEvent(QTabletEvent *);
  541. #endif
  542. #ifndef QT_NO_ACTION
  543.     virtual void actionEvent(QActionEvent *);
  544. #endif
  545. #ifndef QT_NO_DRAGANDDROP
  546.     virtual void dragEnterEvent(QDragEnterEvent *);
  547.     virtual void dragMoveEvent(QDragMoveEvent *);
  548.     virtual void dragLeaveEvent(QDragLeaveEvent *);
  549.     virtual void dropEvent(QDropEvent *);
  550. #endif
  551.     virtual void showEvent(QShowEvent *);
  552.     virtual void hideEvent(QHideEvent *);
  553. #if defined(Q_WS_MAC)
  554.     virtual bool macEvent(EventHandlerCallRef, EventRef);
  555. #endif
  556. #if defined(Q_WS_WIN)
  557.     virtual bool winEvent(MSG *message, long *result);
  558. #endif
  559. #if defined(Q_WS_X11)
  560.     virtual bool x11Event(XEvent *);
  561. #endif
  562. #if defined(Q_WS_QWS)
  563.     virtual bool qwsEvent(QWSEvent *);
  564. #endif
  565.     // Misc. protected functions
  566.     virtual void changeEvent(QEvent *);
  567.     int metric(PaintDeviceMetric) const;
  568.     virtual void inputMethodEvent(QInputMethodEvent *);
  569. public:
  570.     virtual QVariant inputMethodQuery(Qt::InputMethodQuery) const;
  571. protected:
  572.     void resetInputContext();
  573. protected Q_SLOTS:
  574.     void updateMicroFocus();
  575. protected:
  576.     void create(WId = 0, bool initializeWindow = true,
  577.                          bool destroyOldWindow = true);
  578.     void destroy(bool destroyWindow = true,
  579.                  bool destroySubWindows = true);
  580.     virtual bool focusNextPrevChild(bool next);
  581.     inline bool focusNextChild() { return focusNextPrevChild(true); }
  582.     inline bool focusPreviousChild() { return focusNextPrevChild(false); }
  583. protected:
  584.     QWidget(QWidgetPrivate &d, QWidget* parent, Qt::WindowFlags f);
  585. private:
  586.     bool testAttribute_helper(Qt::WidgetAttribute) const;
  587.     friend void qt_syncBackingStore(QWidget *);
  588.     friend void qt_syncBackingStore(QRegion, QWidget *);
  589.     friend void qt_syncBackingStore(QRegion, QWidget *, bool);
  590.     friend QRegion qt_dirtyRegion(QWidget *, bool);
  591.     friend QWindowSurface *qt_default_window_surface(QWidget*);
  592.     friend class QBackingStoreDevice;
  593.     friend class QWidgetBackingStore;
  594.     friend class QApplication;
  595.     friend class QApplicationPrivate;
  596.     friend class QBaseApplication;
  597.     friend class QPainter;
  598.     friend class QPainterPrivate;
  599.     friend class QPixmap; // for QPixmap::fill()
  600.     friend class QFontMetrics;
  601.     friend class QFontInfo;
  602.     friend class QETWidget;
  603.     friend class QLayout;
  604.     friend class QWidgetItem;
  605.     friend class QWidgetItemV2;
  606.     friend class QGLContext;
  607.     friend class QGLWidget;
  608.     friend class QX11PaintEngine;
  609.     friend class QWin32PaintEngine;
  610.     friend class QShortcutPrivate;
  611.     friend class QWindowSurface;
  612.     friend class QD3DWindowSurface;
  613.     friend class QGraphicsProxyWidget;
  614.     friend class QGraphicsProxyWidgetPrivate;
  615.     friend class QStyleSheetStyle;
  616. #ifdef Q_WS_MAC
  617. #ifdef Q_WS_MAC32
  618.     friend class QMacSavedPortInfo;
  619. #endif
  620.     friend class QCoreGraphicsPaintEnginePrivate;
  621.     friend QPoint qt_mac_posInWindow(const QWidget *w);
  622.     friend WindowPtr qt_mac_window_for(const QWidget *w);
  623.     friend bool qt_mac_is_metal(const QWidget *w);
  624.     friend HIViewRef qt_mac_hiview_for(const QWidget *w);
  625.     friend void qt_event_request_window_change(QWidget *widget);
  626. #endif
  627. #ifdef Q_WS_QWS
  628.     friend class QWSBackingStore;
  629.     friend class QWSManager;
  630.     friend class QWSManagerPrivate;
  631.     friend class QDecoration;
  632.     friend class QWSWindowSurface;
  633.     friend class QScreen;
  634.     friend class QVNCScreen;
  635.     friend bool isWidgetOpaque(const QWidget *);
  636.     friend class QGLWidgetPrivate;
  637. #endif
  638.     friend Q_GUI_EXPORT QWidgetData *qt_qwidget_data(QWidget *widget);
  639.     friend Q_GUI_EXPORT QWidgetPrivate *qt_widget_private(QWidget *widget);
  640. private:
  641.     Q_DISABLE_COPY(QWidget)
  642.     Q_PRIVATE_SLOT(d_func(), void _q_showIfNotHidden())
  643.     QWidgetData *data;
  644. #ifdef QT3_SUPPORT
  645. public:
  646.     inline QT3_SUPPORT bool isUpdatesEnabled() const { return updatesEnabled(); }
  647.     QT3_SUPPORT QStyle *setStyle(const QString&);
  648.     inline QT3_SUPPORT bool isVisibleToTLW() const;
  649.     QT3_SUPPORT QRect visibleRect() const;
  650.     inline QT3_SUPPORT void iconify() { showMinimized(); }
  651.     inline QT3_SUPPORT void constPolish() const { ensurePolished(); }
  652.     inline QT3_SUPPORT void polish() { ensurePolished(); }
  653.     inline QT3_SUPPORT void reparent(QWidget *parent, Qt::WindowFlags f, const QPoint &p, bool showIt=false)
  654.     { setParent(parent, f); setGeometry(p.x(),p.y(),width(),height()); if (showIt) show(); }
  655.     inline QT3_SUPPORT void reparent(QWidget *parent, const QPoint &p, bool showIt=false)
  656.     { setParent(parent, windowFlags() & ~Qt::WindowType_Mask); setGeometry(p.x(),p.y(),width(),height()); if (showIt) show(); }
  657.     inline QT3_SUPPORT void recreate(QWidget *parent, Qt::WindowFlags f, const QPoint & p, bool showIt=false)
  658.     { setParent(parent, f); setGeometry(p.x(),p.y(),width(),height()); if (showIt) show(); }
  659.     inline QT3_SUPPORT void setSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver, bool hfw)
  660.     { QSizePolicy sp(hor, ver); sp.setHeightForWidth(hfw); setSizePolicy(sp);}
  661.     inline QT3_SUPPORT bool hasMouse() const { return testAttribute(Qt::WA_UnderMouse); }
  662. #ifndef QT_NO_CURSOR
  663.     inline QT3_SUPPORT bool ownCursor() const { return testAttribute(Qt::WA_SetCursor); }
  664. #endif
  665.     inline QT3_SUPPORT bool ownFont() const { return testAttribute(Qt::WA_SetFont); }
  666.     inline QT3_SUPPORT void unsetFont() { setFont(QFont()); }
  667.     inline QT3_SUPPORT bool ownPalette() const { return testAttribute(Qt::WA_SetPalette); }
  668.     inline QT3_SUPPORT void unsetPalette() { setPalette(QPalette()); }
  669.     Qt::BackgroundMode QT3_SUPPORT backgroundMode() const;
  670.     void QT3_SUPPORT setBackgroundMode(Qt::BackgroundMode, Qt::BackgroundMode = Qt::PaletteBackground);
  671.     const QT3_SUPPORT QColor &eraseColor() const;
  672.     void QT3_SUPPORT setEraseColor(const QColor &);
  673.     const QT3_SUPPORT QColor &foregroundColor() const;
  674.     const QT3_SUPPORT QPixmap *erasePixmap() const;
  675.     void QT3_SUPPORT setErasePixmap(const QPixmap &);
  676.     const QT3_SUPPORT QColor &paletteForegroundColor() const;
  677.     void QT3_SUPPORT setPaletteForegroundColor(const QColor &);
  678.     const QT3_SUPPORT QColor &paletteBackgroundColor() const;
  679.     void QT3_SUPPORT setPaletteBackgroundColor(const QColor &);
  680.     const QT3_SUPPORT QPixmap *paletteBackgroundPixmap() const;
  681.     void QT3_SUPPORT setPaletteBackgroundPixmap(const QPixmap &);
  682.     const QT3_SUPPORT QBrush& backgroundBrush() const;
  683.     const QT3_SUPPORT QColor &backgroundColor() const;
  684.     const QT3_SUPPORT QPixmap *backgroundPixmap() const;
  685.     void QT3_SUPPORT setBackgroundPixmap(const QPixmap &);
  686.     QT3_SUPPORT void setBackgroundColor(const QColor &);
  687.     QT3_SUPPORT QColorGroup colorGroup() const;
  688.     QT3_SUPPORT QWidget *parentWidget(bool sameWindow) const;
  689.     inline QT3_SUPPORT void setKeyCompression(bool b) { setAttribute(Qt::WA_KeyCompression, b); }
  690.     inline QT3_SUPPORT void setFont(const QFont &f, bool) { setFont(f); }
  691.     inline QT3_SUPPORT void setPalette(const QPalette &p, bool) { setPalette(p); }
  692.     enum BackgroundOrigin { WidgetOrigin, ParentOrigin, WindowOrigin, AncestorOrigin };
  693.     inline QT3_SUPPORT void setBackgroundOrigin(BackgroundOrigin){};
  694.     inline QT3_SUPPORT BackgroundOrigin backgroundOrigin() const { return WindowOrigin; }
  695.     inline QT3_SUPPORT QPoint backgroundOffset() const { return QPoint(); }
  696.     inline QT3_SUPPORT void repaint(bool) { repaint(); }
  697.     inline QT3_SUPPORT void repaint(int x, int y, int w, int h, bool) { repaint(x,y,w,h); }
  698.     inline QT3_SUPPORT void repaint(const QRect &r, bool) { repaint(r); }
  699.     inline QT3_SUPPORT void repaint(const QRegion &rgn, bool) { repaint(rgn); }
  700.     QT3_SUPPORT void erase();
  701.     inline QT3_SUPPORT void erase(int x, int y, int w, int h) { erase_helper(x, y, w, h); }
  702.     QT3_SUPPORT void erase(const QRect &);
  703.     QT3_SUPPORT void erase(const QRegion &);
  704.     QT3_SUPPORT void drawText(const QPoint &p, const QString &s)
  705.     { drawText_helper(p.x(), p.y(), s); }
  706.     inline QT3_SUPPORT void drawText(int x, int y, const QString &s)
  707.     { drawText_helper(x, y, s); }
  708.     QT3_SUPPORT bool close(bool);
  709.     inline QT3_SUPPORT QWidget *childAt(int x, int y, bool includeThis) const
  710.     {
  711.         QWidget *w = childAt(x, y);
  712.         return w ? w : ((includeThis && rect().contains(x,y))?const_cast<QWidget*>(this):0);
  713.     }
  714.     inline QT3_SUPPORT QWidget *childAt(const QPoint &p, bool includeThis) const
  715.     {
  716.         QWidget *w = childAt(p);
  717.         return w ? w : ((includeThis && rect().contains(p))?const_cast<QWidget*>(this):0);
  718.     }
  719.     inline QT3_SUPPORT void setCaption(const QString &c)   { setWindowTitle(c); }
  720.     QT3_SUPPORT void setIcon(const QPixmap &i);
  721.     inline QT3_SUPPORT void setIconText(const QString &it) { setWindowIconText(it); }
  722.     inline QT3_SUPPORT QString caption() const             { return windowTitle(); }
  723.     QT3_SUPPORT const QPixmap *icon() const;
  724.     inline QT3_SUPPORT QString iconText() const            { return windowIconText(); }
  725.     inline QT3_SUPPORT void setInputMethodEnabled(bool b) { setAttribute(Qt::WA_InputMethodEnabled, b); }
  726.     inline QT3_SUPPORT bool isInputMethodEnabled() const { return testAttribute(Qt::WA_InputMethodEnabled); }
  727.     inline QT3_SUPPORT void setActiveWindow() { activateWindow(); }
  728.     inline QT3_SUPPORT bool isShown() const { return !isHidden(); }
  729.     inline QT3_SUPPORT bool isDialog() const { return windowType() == Qt::Dialog; }
  730.     inline QT3_SUPPORT bool isPopup() const { return windowType() == Qt::Popup; }
  731.     inline QT3_SUPPORT bool isDesktop() const { return windowType() == Qt::Desktop; }
  732. private:
  733.     void drawText_helper(int x, int y, const QString &);
  734.     void erase_helper(int x, int y, int w, int h);
  735. #endif // QT3_SUPPORT
  736. protected:
  737.     virtual void styleChange(QStyle&); // compat
  738.     virtual void enabledChange(bool);  // compat
  739.     virtual void paletteChange(const QPalette &);  // compat
  740.     virtual void fontChange(const QFont &); // compat
  741.     virtual void windowActivationChange(bool);  // compat
  742.     virtual void languageChange();  // compat
  743. };
  744. Q_DECLARE_OPERATORS_FOR_FLAGS(QWidget::RenderFlags)
  745. #if defined Q_CC_MSVC && _MSC_VER < 1300
  746. template <> inline QWidget *qobject_cast_helper<QWidget*>(QObject *o, QWidget *)
  747. {
  748.     if (!o || !o->isWidgetType()) return 0;
  749.     return (QWidget*)(o);
  750. }
  751. #else
  752. template <> inline QWidget *qobject_cast<QWidget*>(QObject *o)
  753. {
  754.     if (!o || !o->isWidgetType()) return 0;
  755.     return static_cast<QWidget*>(o);
  756. }
  757. template <> inline const QWidget *qobject_cast<const QWidget*>(const QObject *o)
  758. {
  759.     if (!o || !o->isWidgetType()) return 0;
  760.     return static_cast<const QWidget*>(o);
  761. }
  762. #endif
  763. inline QWidget *QWidget::childAt(int ax, int ay) const
  764. { return childAt(QPoint(ax, ay)); }
  765. inline Qt::WindowType QWidget::windowType() const
  766. { return static_cast<Qt::WindowType>(int(data->window_flags & Qt::WindowType_Mask)); }
  767. inline Qt::WindowFlags QWidget::windowFlags() const
  768. { return data->window_flags; }
  769. inline bool QWidget::isTopLevel() const
  770. { return (windowType() & Qt::Window); }
  771. inline bool QWidget::isWindow() const
  772. { return (windowType() & Qt::Window); }
  773. inline bool QWidget::isEnabled() const
  774. { return !testAttribute(Qt::WA_Disabled); }
  775. inline bool QWidget::isModal() const
  776. { return data->window_modality != Qt::NonModal; }
  777. inline bool QWidget::isEnabledToTLW() const
  778. { return isEnabled(); }
  779. inline int QWidget::minimumWidth() const
  780. { return minimumSize().width(); }
  781. inline int QWidget::minimumHeight() const
  782. { return minimumSize().height(); }
  783. inline int QWidget::maximumWidth() const
  784. { return maximumSize().width(); }
  785. inline int QWidget::maximumHeight() const
  786. { return maximumSize().height(); }
  787. inline void QWidget::setMinimumSize(const QSize &s)
  788. { setMinimumSize(s.width(),s.height()); }
  789. inline void QWidget::setMaximumSize(const QSize &s)
  790. { setMaximumSize(s.width(),s.height()); }
  791. inline void QWidget::setSizeIncrement(const QSize &s)
  792. { setSizeIncrement(s.width(),s.height()); }
  793. inline void QWidget::setBaseSize(const QSize &s)
  794. { setBaseSize(s.width(),s.height()); }
  795. inline const QFont &QWidget::font() const
  796. { return data->fnt; }
  797. inline QFontMetrics QWidget::fontMetrics() const
  798. { return QFontMetrics(data->fnt); }
  799. inline QFontInfo QWidget::fontInfo() const
  800. { return QFontInfo(data->fnt); }
  801. inline void QWidget::setMouseTracking(bool enable)
  802. { setAttribute(Qt::WA_MouseTracking, enable); }
  803. inline bool QWidget::hasMouseTracking() const
  804. { return testAttribute(Qt::WA_MouseTracking); }
  805. inline bool QWidget::underMouse() const
  806. { return testAttribute(Qt::WA_UnderMouse); }
  807. inline bool QWidget::updatesEnabled() const
  808. { return !testAttribute(Qt::WA_UpdatesDisabled); }
  809. inline void QWidget::update(int ax, int ay, int aw, int ah)
  810. { update(QRect(ax, ay, aw, ah)); }
  811. inline bool QWidget::isVisible() const
  812. { return testAttribute(Qt::WA_WState_Visible); }
  813. inline bool QWidget::isHidden() const
  814. { return testAttribute(Qt::WA_WState_Hidden); }
  815. inline void QWidget::move(int ax, int ay)
  816. { move(QPoint(ax, ay)); }
  817. inline void QWidget::resize(int w, int h)
  818. { resize(QSize(w, h)); }
  819. inline void QWidget::setGeometry(int ax, int ay, int aw, int ah)
  820. { setGeometry(QRect(ax, ay, aw, ah)); }
  821. inline QRect QWidget::rect() const
  822. { return QRect(0,0,data->crect.width(),data->crect.height()); }
  823. inline const QRect &QWidget::geometry() const
  824. { return data->crect; }
  825. inline QSize QWidget::size() const
  826. { return data->crect.size(); }
  827. inline int QWidget::width() const
  828. { return data->crect.width(); }
  829. inline int QWidget::height() const
  830. { return data->crect.height(); }
  831. inline QWidget *QWidget::parentWidget() const
  832. { return static_cast<QWidget *>(QObject::parent()); }
  833. inline void QWidget::setSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver)
  834. { setSizePolicy(QSizePolicy(hor, ver)); }
  835. inline bool QWidget::testAttribute(Qt::WidgetAttribute attribute) const
  836. {
  837.     if (attribute < int(8*sizeof(uint)))
  838.         return data->widget_attributes & (1<<attribute);
  839.     return testAttribute_helper(attribute);
  840. }
  841. #ifdef QT3_SUPPORT
  842. inline bool QWidget::isVisibleToTLW() const
  843. { return isVisible(); }
  844. inline QWidget *QWidget::parentWidget(bool sameWindow) const
  845. {
  846.     if (sameWindow && isWindow())
  847.         return 0;
  848.     return static_cast<QWidget *>(QObject::parent());
  849. }
  850. inline QColorGroup QWidget::colorGroup() const
  851. { return QColorGroup(palette()); }
  852. inline void QWidget::setPaletteForegroundColor(const QColor &c)
  853. { QPalette p = palette(); p.setColor(foregroundRole(), c); setPalette(p); }
  854. inline const QBrush& QWidget::backgroundBrush() const { return palette().brush(backgroundRole()); }
  855. inline void QWidget::setBackgroundPixmap(const QPixmap &pm)
  856. { QPalette p = palette(); p.setBrush(backgroundRole(), QBrush(pm)); setPalette(p); }
  857. inline const QPixmap *QWidget::backgroundPixmap() const { return 0; }
  858. inline void QWidget::setBackgroundColor(const QColor &c)
  859. { QPalette p = palette(); p.setColor(backgroundRole(), c); setPalette(p); }
  860. inline const QColor & QWidget::backgroundColor() const { return palette().color(backgroundRole()); }
  861. inline const QColor &QWidget::foregroundColor() const { return palette().color(foregroundRole());}
  862. inline const QColor &QWidget::eraseColor() const { return palette().color(backgroundRole()); }
  863. inline void QWidget::setEraseColor(const QColor &c)
  864. { QPalette p = palette(); p.setColor(backgroundRole(), c); setPalette(p); }
  865. inline const QPixmap *QWidget::erasePixmap() const { return 0; }
  866. inline void QWidget::setErasePixmap(const QPixmap &pm)
  867. { QPalette p = palette(); p.setBrush(backgroundRole(), QBrush(pm)); setPalette(p); }
  868. inline const QColor &QWidget::paletteForegroundColor() const { return palette().color(foregroundRole());}
  869. inline const QColor &QWidget::paletteBackgroundColor() const { return palette().color(backgroundRole()); }
  870. inline void QWidget::setPaletteBackgroundColor(const QColor &c)
  871. { QPalette p = palette(); p.setColor(backgroundRole(), c); setPalette(p); }
  872. inline const QPixmap *QWidget::paletteBackgroundPixmap() const
  873. { return 0; }
  874. inline void QWidget::setPaletteBackgroundPixmap(const QPixmap &pm)
  875. { QPalette p = palette(); p.setBrush(backgroundRole(), QBrush(pm)); setPalette(p); }
  876. inline QT3_SUPPORT void QWidget::erase() { erase_helper(0, 0, data->crect.width(), data->crect.height()); }
  877. inline QT3_SUPPORT void QWidget::erase(const QRect &r) { erase_helper(r.x(), r.y(), r.width(), r.height()); }
  878. #endif
  879. #define QWIDGETSIZE_MAX ((1<<24)-1)
  880. QT_END_NAMESPACE
  881. QT_END_HEADER
  882. #endif // QWIDGET_H