QWidget 類

QWidget 類是所有用戶界麵對象的基類。 更多...

頭: #include <QWidget>
qmake: QT += widgets
繼承: QObject and QPaintDevice
繼承者:
38 類型

QAbstractButton , QAbstractSlider , QAbstractSpinBox , QCalendarWidget , QComboBox , QDesignerActionEditorInterface , QDesignerFormWindowInterface , QDesignerObjectInspectorInterface , QDesignerPropertyEditorInterface , QDesignerWidgetBoxInterface , QDesktopWidget , QDialog , QDialogButtonBox , QDockWidget , QFocusFrame , QFrame , QGroupBox , QKeySequenceEdit , QLineEdit , QMacCocoaViewContainer , QMacNativeWidget , QMainWindow , QMdiSubWindow , QMenu , QMenuBar , QOpenGLWidget , QProgressBar , QQuickWidget , QRubberBand , QSizeGrip , QSplashScreen , QSplitterHandle , QStatusBar , QSvgWidget , QTabBar , QTabWidget , QToolBar ,和 QWizardPage

公共類型

enum RenderFlag { DrawWindowBackground, DrawChildren, IgnoreMask }
flags RenderFlags

特性

公共函數

QWidget (QWidget * parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
virtual ~QWidget ()
bool acceptDrops () const
QString accessibleDescription () const
QString accessibleName () const
QList<QAction *> actions () const
void activateWindow ()
void addAction (QAction * action )
void addActions (QList<QAction *> actions )
void adjustSize ()
bool autoFillBackground () const
QPalette::ColorRole backgroundRole () const
QBackingStore * backingStore () const
QSize baseSize () const
QWidget * childAt (int x , int y ) const
QWidget * childAt (const QPoint & p ) const
QRect childrenRect () const
QRegion childrenRegion () const
void clearFocus ()
void clearMask ()
QMargins contentsMargins () const
QRect contentsRect () const
Qt::ContextMenuPolicy contextMenuPolicy () const
QCursor cursor () const
WId effectiveWinId () const
void ensurePolished () const
Qt::FocusPolicy focusPolicy () const
QWidget * focusProxy () const
QWidget * focusWidget () const
const QFont & font () const
QFontInfo fontInfo () const
QFontMetrics fontMetrics () const
QPalette::ColorRole foregroundRole () const
QRect frameGeometry () const
QSize frameSize () const
const QRect & geometry () const
QPixmap grab (const QRect & rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))
void grabGesture (Qt::GestureType gesture , Qt::GestureFlags flags = Qt::GestureFlags())
void grabKeyboard ()
void grabMouse ()
void grabMouse (const QCursor & cursor )
int grabShortcut (const QKeySequence & key , Qt::ShortcutContext context = Qt::WindowShortcut)
QGraphicsEffect * graphicsEffect () const
QGraphicsProxyWidget * graphicsProxyWidget () const
bool hasEditFocus () const
bool hasFocus () const
virtual bool hasHeightForWidth () const
bool hasMouseTracking () const
bool hasTabletTracking () const
int height () const
virtual int heightForWidth (int w ) const
Qt::InputMethodHints inputMethodHints () const
virtual QVariant inputMethodQuery (Qt::InputMethodQuery query ) const
void insertAction (QAction * before , QAction * action )
void insertActions (QAction * before , QList<QAction *> actions )
bool isActiveWindow () const
bool isAncestorOf (const QWidget * child ) const
bool isEnabled () const
bool isEnabledTo (const QWidget * ancestor ) const
bool isFullScreen () const
bool isHidden () const
bool isMaximized () const
bool isMinimized () const
bool isModal () const
bool isVisible () const
bool isVisibleTo (const QWidget * ancestor ) const
bool isWindow () const
bool isWindowModified () const
QLayout * layout () const
Qt::LayoutDirection layoutDirection () const
QLocale locale () const
QPoint mapFrom (const QWidget * parent , const QPoint & pos ) const
QPoint mapFromGlobal (const QPoint & pos ) const
QPoint mapFromParent (const QPoint & pos ) const
QPoint mapTo (const QWidget * parent , const QPoint & pos ) const
QPoint mapToGlobal (const QPoint & pos ) const
QPoint mapToParent (const QPoint & pos ) const
QRegion mask () const
int maximumHeight () const
QSize maximumSize () const
int maximumWidth () const
int minimumHeight () const
QSize minimumSize () const
virtual QSize minimumSizeHint () const
int minimumWidth () const
void move ( const QPoint & )
void move (int x , int y )
QWidget * nativeParentWidget () const
QWidget * nextInFocusChain () const
QRect normalGeometry () const
void overrideWindowFlags (Qt::WindowFlags flags )
const QPalette & palette () const
QWidget * parentWidget () const
QPoint pos () const
QWidget * previousInFocusChain () const
QRect rect () const
void releaseKeyboard ()
void releaseMouse ()
void releaseShortcut (int id )
void removeAction (QAction * action )
void render (QPaintDevice * target , const QPoint & targetOffset = QPoint(), const QRegion & sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))
void render (QPainter * painter , const QPoint & targetOffset = QPoint(), const QRegion & sourceRegion = QRegion(), QWidget::RenderFlags renderFlags = RenderFlags(DrawWindowBackground | DrawChildren))
void repaint (int x , int y , int w , int h )
void repaint (const QRect & rect )
void repaint (const QRegion & rgn )
void resize ( const QSize & )
void resize (int w , int h )
bool restoreGeometry (const QByteArray & geometry )
QByteArray saveGeometry () const
QScreen * screen () const
void scroll (int dx , int dy )
void scroll (int dx , int dy , const QRect & r )
void setAcceptDrops (bool on )
void setAccessibleDescription (const QString & 描述 )
void setAccessibleName (const QString & name )
void setAttribute (Qt::WidgetAttribute attribute , bool on = true)
void setAutoFillBackground (bool enabled )
void setBackgroundRole (QPalette::ColorRole role )
void setBaseSize ( const QSize & )
void setBaseSize (int basew , int baseh )
void setContentsMargins (int left , int top , int right , int bottom )
void setContentsMargins (const QMargins & margins )
void setContextMenuPolicy (Qt::ContextMenuPolicy policy )
void setCursor ( const QCursor & )
void setEditFocus (bool enable )
void setFixedHeight (int h )
void setFixedSize (const QSize & s )
void setFixedSize (int w , int h )
void setFixedWidth (int w )
void setFocus (Qt::FocusReason reason )
void setFocusPolicy (Qt::FocusPolicy policy )
void setFocusProxy (QWidget * w )
void setFont ( const QFont & )
void setForegroundRole (QPalette::ColorRole role )
void setGeometry ( const QRect & )
void setGeometry (int x , int y , int w , int h )
void setGraphicsEffect (QGraphicsEffect * effect )
void setInputMethodHints (Qt::InputMethodHints hints )
void setLayout (QLayout * layout )
void setLayoutDirection (Qt::LayoutDirection direction )
void setLocale (const QLocale & locale )
void setMask (const QBitmap & bitmap )
void setMask (const QRegion & region )
void setMaximumHeight (int maxh )
void setMaximumSize ( const QSize & )
void setMaximumSize (int maxw , int maxh )
void setMaximumWidth (int maxw )
void setMinimumHeight (int minh )
void setMinimumSize ( const QSize & )
void setMinimumSize (int minw , int minh )
void setMinimumWidth (int minw )
void setMouseTracking (bool enable )
void setPalette ( const QPalette & )
void setParent (QWidget * parent )
void setParent (QWidget * parent , Qt::WindowFlags f )
void setShortcutAutoRepeat (int id , bool enable = true)
void setShortcutEnabled (int id , bool enable = true)
void setSizeIncrement ( const QSize & )
void setSizeIncrement (int w , int h )
void setSizePolicy ( QSizePolicy )
void setSizePolicy (QSizePolicy::Policy horizontal , QSizePolicy::Policy vertical )
void setStatusTip ( const QString & )
void setStyle (QStyle * style )
void setTabletTracking (bool enable )
void setToolTip ( const QString & )
void setToolTipDuration (int msec )
void setUpdatesEnabled (bool enable )
void setWhatsThis ( const QString & )
void setWindowFilePath (const QString & filePath )
void setWindowFlag (Qt::WindowType flag , bool on = true)
void setWindowFlags (Qt::WindowFlags type )
void setWindowIcon (const QIcon & icon )
void setWindowModality (Qt::WindowModality windowModality )
void setWindowOpacity (qreal level )
void setWindowRole (const QString & role )
void setWindowState (Qt::WindowStates windowState )
void setupUi (QWidget * widget )
QSize size () const
virtual QSize sizeHint () const
QSize sizeIncrement () const
QSizePolicy sizePolicy () const
void stackUnder (QWidget * w )
QString statusTip () const
QStyle * style () const
QString styleSheet () const
bool testAttribute (Qt::WidgetAttribute attribute ) const
QString toolTip () const
int toolTipDuration () const
bool underMouse () const
void ungrabGesture (Qt::GestureType gesture )
void unsetCursor ()
void unsetLayoutDirection ()
void unsetLocale ()
void update (int x , int y , int w , int h )
void update (const QRect & rect )
void update (const QRegion & rgn )
void updateGeometry ()
bool updatesEnabled () const
QRegion visibleRegion () const
QString whatsThis () const
int width () const
WId winId () const
QWidget * window () const
QString windowFilePath () const
Qt::WindowFlags windowFlags () const
QWindow * windowHandle () const
QIcon windowIcon () const
Qt::WindowModality windowModality () const
qreal windowOpacity () const
QString windowRole () const
Qt::WindowStates windowState () const
QString windowTitle () const
Qt::WindowType windowType () const
int x () const
int y () const

重實現公共函數

virtual QPaintEngine * paintEngine () const override

公共槽

bool close ()
void hide ()
void lower ()
void raise ()
void repaint ()
void setDisabled (bool disable )
void setEnabled ( bool )
void setFocus ()
void setHidden (bool hidden )
void setStyleSheet (const QString & styleSheet )
virtual void setVisible (bool visible )
void setWindowModified ( bool )
void setWindowTitle ( const QString & )
void show ()
void showFullScreen ()
void showMaximized ()
void showMinimized ()
void showNormal ()
void update ()

信號

void customContextMenuRequested (const QPoint & pos )
void windowIconChanged (const QIcon & icon )
void windowTitleChanged (const QString & title )

靜態公共成員

QWidget * createWindowContainer (QWindow * window , QWidget * parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
QWidget * find (WId id )
QWidget * keyboardGrabber ()
QWidget * mouseGrabber ()
void setTabOrder (QWidget * first , QWidget * second )

保護函數

virtual void actionEvent (QActionEvent * event )
virtual void changeEvent (QEvent * event )
virtual void closeEvent (QCloseEvent * event )
virtual void contextMenuEvent (QContextMenuEvent * event )
void create (WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true)
void destroy (bool destroyWindow = true, bool destroySubWindows = true)
virtual void dragEnterEvent (QDragEnterEvent * event )
virtual void dragLeaveEvent (QDragLeaveEvent * event )
virtual void dragMoveEvent (QDragMoveEvent * event )
virtual void dropEvent (QDropEvent * event )
virtual void enterEvent (QEvent * event )
virtual void focusInEvent (QFocusEvent * event )
bool focusNextChild ()
virtual bool focusNextPrevChild (bool next )
virtual void focusOutEvent (QFocusEvent * event )
bool focusPreviousChild ()
virtual void hideEvent (QHideEvent * event )
virtual void inputMethodEvent (QInputMethodEvent * event )
virtual void keyPressEvent (QKeyEvent * event )
virtual void keyReleaseEvent (QKeyEvent * event )
virtual void leaveEvent (QEvent * event )
virtual void mouseDoubleClickEvent (QMouseEvent * event )
virtual void mouseMoveEvent (QMouseEvent * event )
virtual void mousePressEvent (QMouseEvent * event )
virtual void mouseReleaseEvent (QMouseEvent * event )
virtual void moveEvent (QMoveEvent * event )
virtual bool nativeEvent (const QByteArray & eventType , void * message , long * result )
virtual void paintEvent (QPaintEvent * event )
virtual void resizeEvent (QResizeEvent * event )
virtual void showEvent (QShowEvent * event )
virtual void tabletEvent (QTabletEvent * event )
virtual void wheelEvent (QWheelEvent * event )

重實現保護函數

virtual bool event (QEvent * event ) override
virtual void initPainter (QPainter * painter ) const override
virtual int metric (QPaintDevice::PaintDeviceMetric m ) const override

保護槽

void updateMicroFocus ()

QWIDGETSIZE_MAX

詳細描述

Widget 是用戶界麵原子:它從窗口係統接收鼠標、鍵盤及其它事件,並在屏幕上描繪自身錶示。每個 Widget 為矩形,且按 Z 次序排序。父級及其前麵的小部件會裁剪 Widget。

未嵌入父級小部件的 Widget 稱為窗口。通常,窗口擁有框架和標題欄,雖然也是可能的創建不帶這種裝飾的窗口使用閤適 窗口標誌 )。在 Qt 中, QMainWindow 和各種子類化的 QDialog 是最常見的窗口類型。

每個 Widget 的構造函數接受 1 個 (或 2 個) 標準自變量:

  1. QWidget *parent = nullptr 是新建 Widget 的父級。若它為 nullptr (默認),新建小部件將是窗口。若不是,它將是子級對於 parent ,且被約束由 parent 的幾何體 (除非指定 Qt::Window 作為窗口標誌)。
  2. Qt::WindowFlags f = { } (若可用) 設置窗口標誌;默認適於幾乎所有 Widget,但要獲得如沒有窗口係統框架的窗口,還必須使用特殊標誌。

QWidget 有很多成員函數,但其中一些擁有很少的直接功能; QLabel , QPushButton , QListWidget ,和 QTabWidget .

頂層和子級 Widget

沒有父級小部件的 Widget 始終是獨立窗口 (頂層小部件)。對於這些小部件, setWindowTitle () 和 setWindowIcon () 分彆設置標題欄和圖標。

非窗口 Widget 是子級小部件,顯示在其父級小部件內。Qt 中的大多數 Widget 主要用作子級小部件。例如,將按鈕顯示成頂層窗口是可能的,但大多數人首選將按鈕放在其它小部件內,譬如 QDialog .

A parent widget containing various child widgets.

以上簡圖展示 QGroupBox 小部件用於將各種子級 Widget 保持在布局中,提供通過 QGridLayout QLabel 子級小部件已提綱以指示其完整大小。

若想要使用 QWidget 來保持子級小部件,通常需要嚮父 QWidget 添加布局。見 布局管理 瞭解更多信息。

復閤 Widget

當被用作分組許多子級 Widget 的容器時,稱 Widget 為復閤小部件。可以創建這些,通過構造 Widget 采用所需視覺特性 - QFrame ,例如:嚮它添加子級 Widget,通常由布局進行管理。上圖展示使用 Qt Designer 創建這種復閤小部件。

復閤 Widget 還可以被創建,通過子類化標準 Widget,譬如 QWidget 或 QFrame ,並在子類的構造函數中添加必要布局和子級 Widget。許多 隨 Qt 提供的範例 使用這種途徑,且它還涵蓋於 Qt 教程 .

自定義 Widget 和描繪

由於 QWidget 是子類化的 QPaintDevice ,子類可以被用於顯示由一係列描繪操作組成的自定義內容,采用實例化的 QPainter 類。此途徑對比畫布樣式途徑使用 圖形視圖框架 ,其中的項由應用程序添加到場景,並由框架本身渲染。

每個 Widget 履行所有描繪操作均來自其 paintEvent () 函數。這被調用,每當 Widget 需要被重新繪製時,作為某些外部改變的結果或當應用程序請求時。

The 指針式時鍾範例 展示簡單 Widget 如何處理描繪事件。

大小提示和大小策略

當實現新的 Widget 時,它始終很有用去重實現 sizeHint () 以為 Widget 提供閤理默認大小和設置校正大小策略采用 setSizePolicy ().

默認情況下,不提供大小提示的復閤 Widget 將根據其子小部件的空間要求調整大小。

大小策略讓您為布局管理係統提供良好的默認行為,以便其它 Widget 可以輕鬆包含和管理您的小部件。默認大小策略指示錶示首選 Widget 大小的大小提示,且這對許多 Widget 來說經常已足夠。

注意: 頂層 Widget 尺寸被約束到桌麵高度和寬度的 2/3。可以 resize () Widget 手動若這些界限不夠。

事件

Widget 響應通常由用戶動作導緻的事件。Qt 嚮 Widget 交付事件是通過調用特定事件處理函數,采用實例化的 QEvent 子類包含每個事件的有關信息。

若小部件隻包含子級 Widget,可能不需要實現任何事件處理程序。若想要檢測子級 Widget 中的鼠標點擊,調用子級的 underMouse () 函數在 Widget 的 mousePressEvent ().

The 塗鴉範例 實現一組更廣泛事件來處理鼠標移動、按鈕按下及重置窗口大小。

需要為自己的 Widget 提供行為和內容,這裏是 QWidget 相關事件的簡要概述,從最常見的開始:

  • paintEvent () 被調用每當需要重新描繪 Widget 時。每個顯示自定義內容的 Widget 都必須實現它。描繪使用 QPainter 隻可以發生在 paintEvent () 或函數調用通過 paintEvent ().
  • resizeEvent () 被調用當 Widget 被重置大小時。
  • mousePressEvent () 被調用當鼠標光標在 Widget 內按下鼠標按鈕時,或者當 Widget 有抓取鼠標使用 grabMouse ()。按下鼠標不釋放它如同有效調用 grabMouse ().
  • mouseReleaseEvent () 被調用當釋放鼠標按鈕時。Widget 接收鼠標釋放事件,當它有收到相應鼠標按下事件時。這意味著若用戶按下鼠標在 your 小部件,然後將鼠標拖拽到其它地方在釋放鼠標按鈕之前, your 小部件接收釋放事件。有一例外:若齣現彈齣菜單當按下鼠標按鈕時,此彈齣窗口會立即竊取鼠標事件。
  • mouseDoubleClickEvent () 被調用當用戶在 Widget 中雙擊時。若用戶雙擊,Widget 將收到鼠標按下事件、鼠標釋放事件 (鼠標點擊事件)、第 2 次鼠標按下,此事件和最後第 2 次鼠標釋放事件 (也可能收到一些鼠標移動事件,若在此操作期間鼠標未保持穩定)。它是 不可能 區分點擊從雙擊直到第 2 次點擊到達 (這是大多數 GUI 書籍為什麼推薦雙擊是單擊的擴展,而不是觸發不同動作)。

接受鍵盤輸入的 Widget 還需要重實現一些事件處理程序:

  • keyPressEvent () 被調用每當按下鍵時,且它會再次自動重復當按下鍵時間夠長時。 Tab and Shift+Tab 鍵纔被傳遞給 Widget,若它們未用於焦點改變機製。要強製 Widget 處理這些鍵,必須重實現 QWidget::event ().
  • focusInEvent () 被調用當 Widget 獲得鍵盤聚焦時 (假定有調用 setFocusPolicy ())。行為良好的 Widget 以清晰但謹慎的方式指示它們擁有鍵盤聚焦。
  • focusOutEvent () 被調用當 Widget 丟失鍵盤聚焦。

可能還要求重實現一些不太常見的事件處理程序:

  • mouseMoveEvent () 被調用每當鼠標移動時,當按下鼠標按鈕時。這在拖放操作期間很有用。若調用 setMouseTracking (true) 獲取鼠標移動事件,甚至在未按下按鈕時。(另請參閱 拖放 指南)
  • keyReleaseEvent () 被調用每當鍵被釋放且當按下它時 (若鍵自動重復)。在此情況下,每次重復 Widget 都會收到一對鍵釋放和鍵按下事件。 Tab and Shift+Tab 鍵纔被傳遞給 Widget,若它們未用於焦點改變機製。要強製 Widget 處理這些鍵,必須重實現 QWidget::event ().
  • wheelEvent () 被調用每當用戶轉動鼠標滾輪時,當 Widget 擁有聚焦。
  • enterEvent () 被調用當鼠標進入 Widget 的屏幕空間 (這排除由 Widget 的任何子級所擁有的屏幕空間)。
  • leaveEvent () 被調用當鼠標離開 Widget 的屏幕空間。若鼠標進入子級 Widget,不會導緻 leaveEvent ().
  • moveEvent () 被調用當 Widget 有相對於其父級移動時。
  • closeEvent () 被調用當用戶關閉 Widget 時 (或當 close () 被調用)。

還有一些相當費解的事件描述在文檔編製 QEvent::Type 。要處理這些事件,需要重實現 event () 直接。

默認實現的 event () 處理 Tab and Shift+Tab (以移動鍵盤聚焦),並將大多數其它事件傳遞給上文更專業的某一處理程序。

事件和用於交付它們的機製涵蓋在 事件係統 .

函數和特性組

上下文 函數和特性
窗口函數 show (), hide (), raise (), lower (), close ().
頂層窗口 windowModified , windowTitle , windowIcon , isActiveWindow , activateWindow (), minimized , showMinimized (), maximized , showMaximized (), fullScreen , showFullScreen (), showNormal ().
窗口內容 update (), repaint (), scroll ().
幾何體 pos , x (), y (), rect , size , width (), height (), move (), resize (), sizePolicy , sizeHint (), minimumSizeHint (), updateGeometry (), layout (), frameGeometry , geometry , childrenRect , childrenRegion , adjustSize (), mapFromGlobal (), mapToGlobal (), mapFromParent (), mapToParent (), maximumSize , minimumSize , sizeIncrement , baseSize , setFixedSize ()
模式 visible , isVisibleTo (), enabled , isEnabledTo (), modal , isWindow (), mouseTracking , updatesEnabled , visibleRegion ().
外觀和感覺 style (), setStyle (), styleSheet , cursor , font , palette , backgroundRole (), setBackgroundRole (), fontInfo (), fontMetrics ().
鍵盤聚焦函數 focus , focusPolicy , setFocus (), clearFocus (), setTabOrder (), setFocusProxy (), focusNextChild (), focusPreviousChild ().
鼠標和鍵盤抓取 grabMouse (), releaseMouse (), grabKeyboard (), releaseKeyboard (), mouseGrabber (), keyboardGrabber ().
事件處理程序 event (), mousePressEvent (), mouseReleaseEvent (), mouseDoubleClickEvent (), mouseMoveEvent (), keyPressEvent (), keyReleaseEvent (), focusInEvent (), focusOutEvent (), wheelEvent (), enterEvent (), leaveEvent (), paintEvent (), moveEvent (), resizeEvent (), closeEvent (), dragEnterEvent (), dragMoveEvent (), dragLeaveEvent (), dropEvent (), childEvent (), showEvent (), hideEvent (), customEvent (). changeEvent (),
係統函數 parentWidget (), window (), setParent (), winId (), find (), metric ().
上下文菜單 contextMenuPolicy , contextMenuEvent (), customContextMenuRequested (), actions ()
交互式幫助 setToolTip (), setWhatsThis ()

Widget 樣式錶

除各平颱的標準小部件樣式外,Widget 還可以根據指定規則被樣式化在 樣式錶 。此特徵使您能夠定製特定 Widget 外觀,以嚮用戶提供有關其目的視覺暗示。例如,可以按特定方式樣式化按鈕,以指示它履行破壞性動作。

Widget 樣式錶用法的更詳細描述在 Qt 樣式錶 文檔。

透明度和雙緩衝

從 Qt 4.0 起,QWidget 自動雙緩衝其描繪,所以不需要編寫雙緩衝代碼在 paintEvent () 以避免閃爍。

從 Qt 4.1 起,默認情況下,會將父級 Widget 的內容傳播給其每一子級隻要 Qt::WA_PaintOnScreen 未設置。可以通過更新不規則區域 (以創建非矩形子級小部件) 或采用小於完整 Alpha 分量的顔色描繪來編寫自定義 Widget 以利用此特徵。以下簡圖展示如何微調自定義 Widget 的屬性和特性來達成不同效果。

在以上簡圖中,構造移除區域的半透明矩形子級小部件並將其添加到父級 Widget ( QLabel 展示像素圖)。然後,設置不同特性和 Widget 屬性以達成不同效果:

  • 左側 Widget 沒有設置額外特性 (或小部件屬性)。此默認狀態適於大多數形狀不規則 (或采用透明筆刷描繪其整個區域) 且擁有透明度的自定義 Widget。
  • 居中 Widget 擁有 autoFillBackground 設置特性。此特性用於依賴小部件提供默認背景的自定義 Widget,且采用透明筆刷在其整個區域進行描繪。
  • 右側 Widget 擁有 Qt::WA_OpaquePaintEvent Widget 設置屬性。這指示 Widget 將采用不透明顔色描繪其整個區域。小部件區域最初為 uninitialized ,簡圖中采用紅色對角柵格圖案錶示 (透過重繪區域發光)。Qt::WA_OpaquePaintArea 屬性對於需要快速描繪其自己的特定內容且不需要默認填充背景的 Widget 很有用。

要采用簡單背景色快速更新自定義 Widget (譬如:實時繪圖或圖形化 Widget),最好定義閤適的背景色 (使用 setBackgroundRole () 采用 QPalette::Window 角色),設置 autoFillBackground 特性,且僅實現必要繪圖功能在小部件的 paintEvent ().

要快速更新不斷采用不透明內容描繪其整個區域的自定義 Widget (如:視頻流小部件),最好設置小部件的 Qt::WA_OpaquePaintEvent ,避免關聯重新描繪 Widget 背景的任何不必要開銷。

若 Widget 擁有兩者 Qt::WA_OpaquePaintEvent Widget 屬性 and the autoFillBackground 設置特性, Qt::WA_OpaquePaintEvent 屬性優先。根據要求,應選擇它們之一。

從 Qt 4.1 起,還會將父級 Widget 的內容傳播給標準 Qt 小部件。這可能導緻一些意外結果,若父級小部件以非準方式裝飾,如以下簡圖所示。

在不訴諸子類化的情況下,定製標準 Qt 小部件的描繪行為的作用域,可能略小於自定義 Widget 的作用域。通常,可以達成標準 Widget 期望的外觀通過設置其 autoFillBackground 特性。

創建半透明窗口

從 Qt 4.5 起,在支持閤成的窗口係統,創建具有半透明區域的窗口是可能的。

要在頂層 Widget 啓用此特徵,設置其 Qt::WA_TranslucentBackground 屬性采用 setAttribute () 並確保在想要部分透明的區域中采用透明顔色繪製其背景。

平颱注意事項:

  • X11:此特徵依賴於支持 ARGB 視覺和閤成窗口管理器的 X 服務器使用。
  • Windows:小部件需要擁有 Qt::FramelessWindowHint 設置窗口標誌為半透明能工作。
  • macOS:小部件需要擁有 Qt::FramelessWindowHint 設置窗口標誌為半透明能工作。

本機小部件 vs 外來小部件

在 Qt 4.4 引入的外來 Widget 是窗口係統的未知小部件。它們沒有關聯的本機窗口句柄。此特徵可顯著提高小部件描繪、重置大小及移除閃爍的速度。

應要求采用本機窗口的舊行為,可以選取以下某一選項:

  1. 使用 QT_USE_NATIVE_WINDOWS=1 在環境中。
  2. 設置 Qt::AA_NativeWindows 應用程序屬性。所有 Widget 將是本機小部件。
  3. 設置 Qt::WA_NativeWindow 小部件屬性:小部件本身及其所有祖先將變為本機的 (除非 Qt::WA_DontCreateNativeAncestors 有設置)。
  4. 調用 QWidget::winId 以強製本機窗口 (這隱含 3)。
  5. 設置 Qt::WA_PaintOnScreen 屬性以強迫本機窗口 (這隱含 3)。

另請參閱 QEvent , QPainter , QGridLayout ,和 QBoxLayout .

成員類型文檔編製

enum QWidget:: RenderFlag
flags QWidget:: RenderFlags

此枚舉描述如何渲染 Widget 當調用 QWidget::render ().

常量 描述
QWidget::DrawWindowBackground 0x1 若啓用此選項,Widget 背景被渲染到目標即使 autoFillBackground 未設置。默認情況下,此選項是啓用的。
QWidget::DrawChildren 0x2 若啓用此選項,Widget 的子級被遞歸渲染到目標。默認情況下,此選項是啓用的。
QWidget::IgnoreMask 0x4 若啓用此選項,Widget 的 QWidget::mask () 被忽略當渲染到目標時。默認情況下,此選項是禁用的。

該枚舉在 Qt 4.3 引入或被修改。

RenderFlags 類型是 typedef 對於 QFlags <RenderFlag>。它存儲 RenderFlag 值的 OR 組閤。

特性文檔編製

acceptDrops : bool

此特性保持是否為此 Widget 啓用下落事件

把此特性設為 true 嚮係統宣布此小部件 may 能夠接受掉落事件。

若 Widget 是桌麵 ( windowType () == Qt::Desktop ),這可能失敗,若另一應用程序正在使用桌麵;可以調用 acceptDrops() 進行測試,若這齣現。

警告: 不要在拖放事件處理程序中修改此特性。

默認情況下,此特性為 false .

訪問函數:

bool acceptDrops () const
void setAcceptDrops (bool on )

另請參閱 拖放 .

accessibleDescription : QString

此特性按通過輔助技術可見保持 Widget 的描述

Widget 的可訪問描述應該傳達小部件能做什麼。而 accessibleName 應該是簡短且簡潔的字符串 (如 Save ),描述應該給齣更多上下文,譬如 保存當前文檔 .

此特性必須為 localized .

默認情況下,此特性包含空字符串,且 Qt 會迴退到使用工具提示以提供此信息。

訪問函數:

QString accessibleDescription () const
void setAccessibleDescription (const QString & 描述 )

另請參閱 QWidget::accessibleName and QAccessibleInterface::text ().

accessibleName : QString

此特性保持通過輔助技術可見的 Widget 名稱

這是通過輔助技術 (譬如:屏幕閱讀器) 宣布此 Widget 的首要名稱。對於大多數 Widget,不要求設置此特性。例如對於 QPushButton 將使用按鈕文本。

設置此特性很重要,當 Widget 不提供任何文本時。例如,僅包含圖標的按鈕需要設置此特性以工作於屏幕閱讀器。名稱應簡短且等效於由 Widget 傳達的視覺信息。

此特性必須為 localized .

默認情況下,此特性包含空字符串。

訪問函數:

QString accessibleName () const
void setAccessibleName (const QString & name )

另請參閱 QWidget::accessibleDescription and QAccessibleInterface::text ().

autoFillBackground : bool

此特性保持是否自動填充 Widget 背景

若啓用,此特性將導緻 Qt 填充 Widget 背景在援引描繪事件之前。使用顔色的定義通過 QPalette::Window 顔色角色來自 Widget 的 palette .

此外,填充窗口總是采用 QPalette::Window ,除非有設置 WA_OpaquePaintEvent (或 WA_NoSystemBackground) 屬性。

此特性無法被關閉 (即設為 false),若 Widget 父級擁有用於其背景的靜態漸變。

警告: 使用此特性要謹慎當結閤 Qt 樣式錶 。當 Widget 擁有帶有效背景或邊框圖像的樣式錶時,此特性被自動禁用。

默認情況下,此特性為 false .

該特性在 Qt 4.1 引入。

訪問函數:

bool autoFillBackground () const
void setAutoFillBackground (bool enabled )

另請參閱 Qt::WA_OpaquePaintEvent , Qt::WA_NoSystemBackground ,和 透明度和雙緩衝 .

baseSize : QSize

此特性保持 Widget 的基尺寸

基尺寸用於計算適當 Widget 尺寸,若小部件有定義 sizeIncrement ().

默認情況下,對於新近創建的 Widget,此特性包含 0 寬高尺寸。

訪問函數:

QSize baseSize () const
void setBaseSize ( const QSize & )
void setBaseSize (int basew , int baseh )

另請參閱 setSizeIncrement ().

childrenRect : const QRect

此特性保持 Widget 子級的邊界矩形

排除隱藏子級。

默認情況下,對於沒有子級的 Widget,此特性包含位於原點的 0 寬高矩形。

訪問函數:

QRect childrenRect () const

另請參閱 childrenRegion () 和 geometry ().

childrenRegion : const QRegion

此特性保持由 Widget 子級占據的組閤區域

排除隱藏子級。

默認情況下,對於沒有子級的 Widget,此特性包含空區域。

訪問函數:

QRegion childrenRegion () const

另請參閱 childrenRect (), geometry (),和 mask ().

contextMenuPolicy : Qt::ContextMenuPolicy

Widget 如何展示上下文菜單

此特性的默認值為 Qt::DefaultContextMenu ,這意味著 contextMenuEvent () 處理程序會被調用。其它值包括 Qt::NoContextMenu , Qt::PreventContextMenu , Qt::ActionsContextMenu ,和 Qt::CustomContextMenu 。采用 Qt::CustomContextMenu ,信號 customContextMenuRequested () 發射。

訪問函數:

Qt::ContextMenuPolicy contextMenuPolicy () const
void setContextMenuPolicy (Qt::ContextMenuPolicy policy )

另請參閱 contextMenuEvent (), customContextMenuRequested (),和 actions ().

cursor : QCursor

此特性保持此 Widget 的光標形狀

鼠標光標將假定此形狀,當它越過此 Widget 時。見 預定義光標對象列錶 瞭解有用形狀範圍。

編輯器 Widget 可能使用 I-beam 光標:

setCursor(Qt::IBeamCursor);
					

若未設置光標,或在調用 unsetCursor() 之後,則使用父級的光標。

默認情況下,此特性包含的光標具有 Qt::ArrowCursor 形狀。

一些底層窗口實現將重置光標若它離開 Widget,即使鼠標被抓取。若想要為所有 Widget 設置光標,甚至在窗口外時,考慮 QGuiApplication::setOverrideCursor ().

訪問函數:

QCursor cursor () const
void setCursor ( const QCursor & )
void unsetCursor ()

另請參閱 QGuiApplication::setOverrideCursor ().

enabled : bool

此特性保持 Widget 是否被啓用

一般而言,啓用 Widget 處理鍵盤和鼠標事件;禁用小部件不會。例外是 QAbstractButton .

某些 Widget 按不同方式顯示自身,當它們被禁用時。例如,按鈕可能將其標簽繪製為灰色。若 Widget 需要知道它何時變為啓用或禁用,可以使用 changeEvent () 采用類型 QEvent::EnabledChange .

禁用 Widget 隱式禁用其所有子級。啓用會分彆啓用所有子級 Widget,除非它們被明確禁用。明確啓用不是窗口的子級 Widget (而其父級 Widget 仍被禁用) 是不可能的。

默認情況下,此特性為 true .

訪問函數:

bool isEnabled () const
void setEnabled ( bool )

另請參閱 isEnabledTo (), QKeyEvent , QMouseEvent ,和 changeEvent ().

focus : const bool

此特性保持此 Widget (或其聚焦代理) 是否擁有鍵盤輸入聚焦

默認情況下,此特性為 false .

注意: 獲取 Widget 此特性值有效相當於校驗是否 QApplication::focusWidget () 引用 Widget。

訪問函數:

bool hasFocus () const

另請參閱 setFocus (), clearFocus (), setFocusPolicy (),和 QApplication::focusWidget ().

focusPolicy : Qt::FocusPolicy

此特性保持 Widget 接受鍵盤聚焦的方式

策略為 Qt::TabFocus 若 Widget 通過 Tab 鍵接受鍵盤聚焦, Qt::ClickFocus 若 Widget 通過點擊接受聚焦, Qt::StrongFocus 若它接受兩者,而 Qt::NoFocus (默認) 若它根本不接受聚焦。

必須為 Widget 啓用鍵盤聚焦,若它處理鍵盤事件。通常這是由 Widget 構造函數完成的。例如, QLineEdit 構造函數調用 setFocusPolicy( Qt::StrongFocus ).

若 Widget 有聚焦代理,聚焦策略就會傳播給它。

訪問函數:

Qt::FocusPolicy focusPolicy () const
void setFocusPolicy (Qt::FocusPolicy policy )

另請參閱 focusInEvent (), focusOutEvent (), keyPressEvent (), keyReleaseEvent (),和 enabled .

font : QFont

此特性保持 Widget 目前設置的字體

此特性描述 Widget 的請求字體。字體用於 Widget 樣式當渲染標準組件時,且可用作確保自定義 Widget 與本機平颱外觀和感覺可以保持一緻的手段。不同的平颱或不同的樣式,為應用程序定義不同字體很常見。

當將新字體賦值給 Widget 時,此字體特性組閤小部件默認字體以形成小部件最終字體。可以調用 fontInfo () 獲取 Widget 的最終字體副本。最終字體還用於初始化 QPainter 的字體。

默認從屬係統環境。 QApplication 維護係統/主題字體 (充當所有 Widget 的默認字體)。某些類型的 Widget 還可能有特殊默認字體。也可以為 Widget 自己定義默認字體,通過將自定義字體和小部件名稱傳遞給 QApplication::setFont ()。最後,字體匹配 Qt 字體數據庫以找到最佳匹配。

QWidget 明確從父級傳播字體特性到子級。若改變字體具體特性並將該字體賦值給 Widget,該特性將傳播給小部件的所有子級,覆蓋該特性的任何係統默認值。注意,默認情況下,字體不會被傳播給窗口 (見 isWindow ()) 除非 Qt::WA_WindowPropagation 屬性被啓用。

QWidget 的字體傳播類似於其調色闆傳播。

當前樣式用於渲染所有標準 Qt 小部件的內容,可以自由選擇所用 Widget 字體,或在某些情況下,(部分或完全) 忽略它。尤其,某些風格像 GTK 風格、Mac 風格及 Windows Vista 風格,對 Widget 字體應用特殊修改以匹配平颱的本機外觀和感覺。因為此,將特性賦值給 Widget 字體並不保證會改變 Widget 外觀。取而代之,可以選擇應用 styleSheet .

注意: Qt 樣式錶 用於如 setFont() 的相同 Widget,樣式錶優先若設置衝突。

訪問函數:

const QFont & font () const
void setFont ( const QFont & )

另請參閱 fontInfo () 和 fontMetrics ().

frameGeometry : const QRect

相對於其父級包括任何窗口框架的 Widget 幾何體

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

默認情況下,此特性包含從屬用戶平颱和屏幕幾何體的值。

訪問函數:

QRect frameGeometry () const

另請參閱 geometry (), x (), y (),和 pos ().

frameSize : const QSize

此特性保持包括任何窗口框架的 Widget 尺寸

默認情況下,此特性包含從屬用戶平颱和屏幕幾何體的值。

訪問函數:

QSize frameSize () const

fullScreen : const bool

此特性保持 Widget 是否以全屏模式展示

全屏模式下 Widget 占據整個屏幕區域且不顯示窗口裝飾 (譬如:標題欄)。

默認情況下,此特性為 false .

訪問函數:

bool isFullScreen () const

另請參閱 windowState (), minimized ,和 maximized .

geometry : QRect

此特性保持 Widget 相對於其父級的幾何體,但不包括窗口框架

當改變幾何體時,Widget (若可見) 接收移動事件 ( moveEvent ()) 和/或重置大小事件 ( resizeEvent ()) 立即。若小部件目前不可見,保證收到適當事件在展示它之前。

調節其組件大小,若它超齣範圍定義通過 minimumSize () 和 maximumSize ().

警告: 調用 setGeometry() 在 resizeEvent () 或 moveEvent () 可能導緻無限遞歸。

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

默認情況下,此特性包含從屬用戶平颱和屏幕幾何體的值。

訪問函數:

const QRect & geometry () const
void setGeometry (int x , int y , int w , int h )
void setGeometry ( const QRect & )

另請參閱 frameGeometry (), rect (), move (), resize (), moveEvent (), resizeEvent (), minimumSize (),和 maximumSize ().

height : const int

此特性排除任何窗口框架保持 Widget 高度

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

注意: 不要使用此函數去查找屏幕高度在 多屏桌麵 。讀取 此注意事項 瞭解細節。

默認情況下,此特性包含從屬用戶平颱和屏幕幾何體的值。

訪問函數:

int height () const

另請參閱 geometry , width ,和 size .

inputMethodHints : Qt::InputMethodHints

Widget 有什麼輸入法特定提示。

這僅與輸入 Widget 相關。輸入法使用它來檢索輸入法應該如何操作的有關提示。例如,若 Qt::ImhFormattedNumbersOnly 標誌被設置,輸入法可以改變其視覺組件以反射隻可以錄入數字。

警告: 一些 Widget 要求某些標誌纔如打算般工作。要設置標誌,執行 w->setInputMethodHints(w->inputMethodHints()|f) 而不是 w->setInputMethodHints(f) .

注意: 標誌隻是提示,因此,特定輸入法實現可自由忽略它們。若希望確保錄入某種類型的字符,還應該設置 QValidator 在 Widget。

默認值為 Qt::ImhNone .

該特性在 Qt 4.6 引入。

訪問函數:

Qt::InputMethodHints inputMethodHints () const
void setInputMethodHints (Qt::InputMethodHints hints )

另請參閱 inputMethodQuery ().

isActiveWindow : const bool

此特性保持此 Widget 窗口,是否為活動窗口

活動窗口是包含擁有鍵盤聚焦的 Widget 窗口 (窗口仍可能擁有聚焦,若它沒有 Widget 或其 Widget 不接受鍵盤聚焦)。

當彈齣窗口可見時,此特性為 true 對於活動窗口 and 對於彈齣窗口。

默認情況下,此特性為 false .

訪問函數:

bool isActiveWindow () const

另請參閱 activateWindow () 和 QApplication::activeWindow ().

layoutDirection : Qt::LayoutDirection

此特性保持此 Widget 的布局方嚮。

注意: 從 Qt 4.7 起,此方法不再影響文本布局方嚮。

默認情況下,此特性被設為 Qt::LeftToRight .

當布局方嚮在 Widget 中有設置時,將傳播到小部件子級,但不會傳播給是窗口的子級,且也不會傳播給已明確調用 setLayoutDirection() 的子級。此外,添加的子級小部件 after setLayoutDirection() 已被父級調用,不會繼承父級的布局方嚮。

訪問函數:

Qt::LayoutDirection layoutDirection () const
void setLayoutDirection (Qt::LayoutDirection direction )
void unsetLayoutDirection ()

另請參閱 QApplication::layoutDirection .

locale : QLocale

此特性保持 Widget 的區域設置

隻要沒有設置特殊區域設置,這要麼是父級的區域設置,要麼 (若此 Widget 是頂層小部件) 是默認區域設置。

若 Widget 顯示日期或數字,則應使用小部件區域設置對其進行格式化。

該特性在 Qt 4.3 引入。

訪問函數:

QLocale locale () const
void setLocale (const QLocale & locale )
void unsetLocale ()

另請參閱 QLocale and QLocale::setDefault ().

maximized : const bool

此特性保持此 Widget 是否為最大化

此特性僅相關窗口。

注意: 由於某些窗口係統的局限性,這並不總是報告期望結果 (如:若 X11 用戶憑藉窗口管理器最大化窗口,Qt 將沒有辦法區分這與任何其它重置大小)。隨著窗口管理器協議的進化,期望這有改進。

默認情況下,此特性為 false .

訪問函數:

bool isMaximized () const

另請參閱 windowState (), showMaximized (), visible , show (), hide (), showNormal (),和 minimized .

maximumHeight : int

此特性保持 Widget 的最大高度 (以像素為單位)

此特性對應高度的保持通過 maximumSize 特性。

默認情況下,此特性包含 16777215 值。

注意: 定義的 QWIDGETSIZE_MAX 宏限製 Widget 最大尺寸。

訪問函數:

int maximumHeight () const
void setMaximumHeight (int maxh )

另請參閱 maximumSize and maximumWidth .

maximumSize : QSize

此特性保持 Widget 的最大尺寸 (以像素為單位)

Widget 尺寸無法被重置為比最大小部件尺寸更大的尺寸。

默認情況下,此特性包含寬度和高度值為 16777215 的尺寸。

注意: 定義的 QWIDGETSIZE_MAX 宏限製 Widget 最大尺寸。

訪問函數:

QSize maximumSize () const
void setMaximumSize ( const QSize & )
void setMaximumSize (int maxw , int maxh )

另請參閱 maximumWidth , maximumHeight , minimumSize ,和 sizeIncrement .

maximumWidth : int

此特性保持 Widget 最大寬度 (以像素為單位)

此特性對應的寬度保持通過 maximumSize 特性。

默認情況下,此特性包含 16777215 值。

注意: 定義的 QWIDGETSIZE_MAX 宏限製 Widget 最大尺寸。

訪問函數:

int maximumWidth () const
void setMaximumWidth (int maxw )

另請參閱 maximumSize and maximumHeight .

minimized : const bool

此特性保持此 Widget 是否最小化 (圖標化)

此特性僅相關窗口。

默認情況下,此特性為 false .

訪問函數:

bool isMinimized () const

另請參閱 showMinimized (), visible , show (), hide (), showNormal (),和 maximized .

minimumHeight : int

此特性保持 Widget 最小高度 (以像素為單位)

此特性對應高度的保持通過 minimumSize 特性。

默認情況下,此特性擁有 0 值。

訪問函數:

int minimumHeight () const
void setMinimumHeight (int minh )

另請參閱 minimumSize and minimumWidth .

minimumSize : QSize

此特性保持 Widget 的最小大小

無法將 Widget 重置為比最小小部件大小更小的大小。強製 Widget 大小為最小大小,若當前大小更小。

由此函數設置的最小大小將覆寫的最小大小的定義通過 QLayout 。要取消最小尺寸設置,使用值 QSize(0, 0) .

默認情況下,此特性包含 0 大小寬度和高度。

訪問函數:

QSize minimumSize () const
void setMinimumSize ( const QSize & )
void setMinimumSize (int minw , int minh )

另請參閱 minimumWidth , minimumHeight , maximumSize ,和 sizeIncrement .

minimumSizeHint : const QSize

此特性保持 Widget 的最小推薦尺寸

若此特性的值是無效尺寸,不推薦使用最小尺寸。

minimumSizeHint() 默認實現返迴無效尺寸若此 Widget 沒有布局,否則返迴布局的最小尺寸。大多數內置 Widget 有重實現 minimumSizeHint()。

QLayout 從不會將 Widget 尺寸重置成小於最小尺寸提示,除非 minimumSize () 有設置或大小策略被設為 QSizePolicy::Ignore。若 minimumSize () 有設置,忽略最小尺寸提示。

訪問函數:

virtual QSize minimumSizeHint () const

另請參閱 QSize::isValid (), resize (), setMinimumSize (),和 sizePolicy ().

minimumWidth : int

此特性保持 Widget 的最小寬度 (以像素為單位)

此特性對應的寬度保持通過 minimumSize 特性。

默認情況下,此特性擁有 0 值。

訪問函數:

int minimumWidth () const
void setMinimumWidth (int minw )

另請參閱 minimumSize and minimumHeight .

此特性保持 Widget 是否為模態小部件

此特性僅對窗口有意義。模態 Widget 阻止所有其它窗口中的小部件獲得任何輸入。

默認情況下,此特性為 false .

訪問函數:

bool isModal () const

另請參閱 isWindow (), windowModality ,和 QDialog .

mouseTracking : bool

此特性保持是否有為 Widget 啓用鼠標追蹤

若禁用鼠標追蹤 (默認),當至少按下一鼠標按鈕移動鼠標時,Widget 纔接收鼠標移動事件。

若啓用鼠標追蹤,Widget 將接收鼠標移動事件,即使沒有按下按鈕。

訪問函數:

bool hasMouseTracking () const
void setMouseTracking (bool enable )

另請參閱 mouseMoveEvent ().

normalGeometry : const QRect

此特性保持 Widget 幾何體,因為它會齣現當展示作為正常 (非最大化或全屏) 頂層小部件時

對於子級 Widget,此特性始終保持空矩形。

默認情況下,此特性包含空矩形。

訪問函數:

QRect normalGeometry () const

另請參閱 QWidget::windowState () 和 QWidget::geometry .

palette : QPalette

此特性保持 Widget 的調色闆

此特性描述 Widget 的調色闆。調色闆用於 Widget 樣式當渲染標準組件時,且可用作確保自定義 Widget 與本機平颱外觀和感覺可以保持一緻的手段。不同平颱或不同樣式,有不同的調色闆很常見。

當將新調色闆賦值給 Widget 時,來自此調色闆的顔色角色組閤 Widget 的默認調色闆,以形成 Widget 的最終調色闆。Widget 背景角色的調色闆條目用於填充小部件的背景 (見 QWidget::autoFillBackground ),和前景角色初始化 QPainter 的鋼筆。

默認從屬係統環境。 QApplication 維護充當所有 Widget 的默認的係統/主題調色闆。對於某些類型的 Widget,還可能默認存在特殊調色闆 (如:在 Windows Vista,所有類派生自 QMenuBar 擁有特殊默認調色闆)。也可以定義自己的 Widget 默認調色闆,通過將自定義調色闆和 Widget 名稱傳遞給 QApplication::setPalette ()。最後,樣式始終擁有賦值時拋光調色闆的選項 (見 QStyle::polish ()).

QWidget 明確將調色闆角色從父級傳播給子級。若將筆刷 (或顔色) 賦值給調色闆中的特定角色,並將該調色闆賦值給 Widget,該角色將被傳播給 Widget 的所有子級,覆蓋該角色的任何係統默認值。注意,默認情況下不會將調色闆傳播給窗口 (見 isWindow ()) 除非 Qt::WA_WindowPropagation 屬性被啓用。

QWidget 調色闆的傳播類似於其字體傳播。

當前風格用於渲染所有標準 Qt 小部件的內容,可以自由地從 Widget 調色闆選擇顔色和筆刷,或在某些情況下可以 (部分或完全) 忽略調色闆。尤其,某些風格 (像 GTK 風格、Mac 風格及 Windows Vista 風格) 從屬第三方 API 來渲染小部件的內容,且這些風格通常不遵循調色闆。因為這,把角色賦值給 Widget 調色闆不保證 Widget 會改變外觀。相反,可以選擇應用 styleSheet .

警告: 不要使用此函數結閤 Qt 樣式錶 。當使用樣式錶時,可以使用 color、background-color、selection-color、selection-background-color 及 alternate-background-color 定製 Widget 調色闆。

訪問函數:

const QPalette & palette () const
void setPalette ( const QPalette & )

另請參閱 QGuiApplication::palette (), QWidget::font (),和 Qt 樣式錶 .

pos : QPoint

此特性保持 Widget 在其父級小部件中的位置

若 Widget 是窗口,則位置是小部件在桌麵上的位置,包括其框架。

當改變位置時,Widget (若可見) 接收移動事件 ( moveEvent ()) 立即。若小部件目前不可見,保證收到事件在展示它之前。

默認情況下,此特性包含原點引用位置。

警告: 調用 move() 或 setGeometry () 在 moveEvent () 可能導緻無限遞歸。

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

訪問函數:

QPoint pos () const
void move (int x , int y )
void move ( const QPoint & )

另請參閱 frameGeometry , size , x (),和 y ().

rect : const QRect

此特性保持 Widget 的內部幾何體,排除任何窗口框架

矩形特性等於 QRect (0, 0, width (), height ()).

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

默認情況下,此特性包含從屬用戶平颱和屏幕幾何體的值。

訪問函數:

QRect rect () const

另請參閱 size .

size : QSize

此特性保持 Widget 的大小,排除任何窗口框架

若重置大小時可見,Widget 接收重置大小事件 ( resizeEvent ()) 立即。若小部件目前不可見,保證收到事件在展示它之前。

調節其大小,若它超齣範圍定義通過 minimumSize () 和 maximumSize ().

默認情況下,此特性包含從屬用戶平颱和屏幕幾何體的值。

警告: 調用 resize() 或 setGeometry () 在 resizeEvent () 可能導緻無限遞歸。

注意: 將尺寸設為 QSize(0, 0) 將導緻 Widget 不齣現在屏幕上。這也適用於窗口。

訪問函數:

QSize size () const
void resize (int w , int h )
void resize ( const QSize & )

另請參閱 pos , geometry , minimumSize , maximumSize , resizeEvent (),和 adjustSize ().

sizeHint : const QSize

此特性保持 Widget 的推薦尺寸

若此特性的值是無效尺寸,則沒有尺寸被推薦。

默認 sizeHint() 實現返迴無效尺寸,若此 Widget 沒有布局;否則,返迴布局的首選尺寸。

訪問函數:

virtual QSize sizeHint () const

另請參閱 QSize::isValid (), minimumSizeHint (), sizePolicy (), setMinimumSize (),和 updateGeometry ().

sizeIncrement : QSize

此特性保持 Widget 的大小增量

當用戶重置窗口大小時,大小將按 sizeIncrement() 步幅移動。 width () 像素水平和 sizeIncrement。 height () 像素垂直,采用 baseSize () 作為基礎。首選 Widget 大小是非負整數 i and j :

width = baseSize().width() + i * sizeIncrement().width();
height = baseSize().height() + j * sizeIncrement().height();
					

注意,雖然可以為所有 Widget 設置大小增量,但它僅影響窗口。

默認情況下,此特性包含 0 大小寬度和高度。

警告: 大小增量在 Windows 不起作用,而在 X11 可能會被窗口管理器忽視。

訪問函數:

QSize sizeIncrement () const
void setSizeIncrement ( const QSize & )
void setSizeIncrement (int w , int h )

另請參閱 size , minimumSize ,和 maximumSize .

sizePolicy : QSizePolicy

此特性保持 Widget 的默認布局行為

若有 QLayout 管理此 Widget 的子級,將使用由該布局指定的大小策略。若沒有這種 QLayout ,使用此函數的結果。

默認策略為 Preferred/Preferred (首選/首選),意味著 Widget 可以自由重置大小,但首選大小由 sizeHint () 返迴。像按鈕 Widget 設置大小策略以指定它們可以水平拉伸,但垂直固定。這同樣適用於行編輯控件 (譬如 QLineEdit , QSpinBox 或可編輯 QComboBox ) 及其它水平取嚮 Widget (譬如 QProgressBar ). QToolButton 通常為正方形,所以,它們允許 2 方嚮增長。支持不同方嚮的 Widget (譬如 QSlider , QScrollBar 或 QHeader) 僅指定相應方嚮的拉伸。可以提供滾動條的 Widget (通常是子類化的 QScrollArea ) 傾嚮於指定它們可以使用的額外空間,且它們可以使用的空間小於 sizeHint ().

訪問函數:

QSizePolicy sizePolicy () const
void setSizePolicy ( QSizePolicy )
void setSizePolicy (QSizePolicy::Policy horizontal , QSizePolicy::Policy vertical )

另請參閱 sizeHint (), QLayout , QSizePolicy ,和 updateGeometry ().

statusTip : QString

此特性保持 Widget 的狀態提示

默認情況下,此特性包含空字符串。

訪問函數:

QString statusTip () const
void setStatusTip ( const QString & )

另請參閱 toolTip and whatsThis .

styleSheet : QString

此特性保持 Widget 的樣式錶

樣式錶包含定製 Widget 樣式的正文描述,作為描述在 Qt 樣式錶 文檔。

從 Qt 4.5 起,Qt 樣式錶完全支持 macOS。

警告: Qt 樣式錶目前不支持自定義 QStyle 子類。計劃在某些未來發行中解決此問題。

該特性在 Qt 4.2 引入。

訪問函數:

QString styleSheet () const
void setStyleSheet (const QString & styleSheet )

另請參閱 setStyle (), QApplication::styleSheet ,和 Qt 樣式錶 .

tabletTracking : bool

此特性保持是否為 Widget 啓用數位闆追蹤

若數位闆追蹤被禁用 (默認),Widget 纔接收數位闆移動事件當手寫筆接觸數位闆時,或至少按下某一觸控筆按鈕,當移動手寫筆時。

若數位闆追蹤被啓用,Widget 接收數位闆移動事件即使在附近徘徊。這對監控位置、輔助特性 (譬如:鏇轉和傾斜) 及在 UI 中提供反饋很有用。

該特性在 Qt 5.9 引入。

訪問函數:

bool hasTabletTracking () const
void setTabletTracking (bool enable )

另請參閱 tabletEvent ().

toolTip : QString

此特性保持 Widget 的工具提示

注意,默認情況下,工具提示纔展示當 Widget 是活動窗口子級時。可以改變此行為通過設置屬性 Qt::WA_AlwaysShowToolTips window ,不在帶有工具提示的 Widget 中。

若想要控製工具提示的行為,可以攔截 event () 函數和捕獲 QEvent::ToolTip 事件 (如,若想要定製應展示工具提示的區域)。

默認情況下,此特性包含空字符串。

訪問函數:

QString toolTip () const
void setToolTip ( const QString & )

另請參閱 QToolTip , statusTip ,和 whatsThis .

toolTipDuration : int

此特性保持 Widget 的工具提示持續時間

指定工具提示將顯示多長時間 (以毫秒為單位)。若值為 -1 (默認),將根據工具提示的長度計算持續時間。

該特性在 Qt 5.2 引入。

訪問函數:

int toolTipDuration () const
void setToolTipDuration (int msec )

另請參閱 toolTip .

updatesEnabled : bool

此特性保持是否啓用更新

啓用更新的 Widget 接收描繪事件並擁有係統背景;禁用的 Widget 不會。這還隱含調用 update () 和 repaint () 無效,若更新被禁用。

默認情況下,此特性為 true .

setUpdatesEnabled()通常用於在短時間內禁用更新 (例如:避免在較大變化期間屏幕閃爍)。在 Qt,Widget 通常不生成屏幕閃爍,但在 X11,服務器可能擦除屏幕區域當 Widget 被隱藏時,在以其它 Widget 替換它們之前。禁用更新可解決此。

範例:

setUpdatesEnabled(false);
bigVisualChanges();
setUpdatesEnabled(true);
					

禁用 Widget 隱式禁用其所有子級。啓用 Widget 啓用所有子級小部件 except 頂層 Widget 或已被明確禁用的那些。重新啓用更新隱式調用 update () 在 Widget。

訪問函數:

bool updatesEnabled () const
void setUpdatesEnabled (bool enable )

另請參閱 paintEvent ().

visible : bool

此特性保持 Widget 是否可見

調用 setVisible(true) 或 show () 把 Widget 設為可見狀態,若直到窗口的所有父級小部件可見。若祖先不可見,Widget 不會變為可見,直到展示其所有祖先。若其大小 (或位置) 有改變,在展示前 Qt 保證 Widget 會獲得移動和重置大小事件。若 Widget 尚未重置大小,Qt 把小部件大小調節到有用默認值使用 adjustSize ().

調用 setVisible(false) 或 hide () 明確隱藏 Widget。被明確隱藏的 Widget 從不會變為可見,即使其所有祖先變為可見,除非展示它。

Widget 接收展示和隱藏事件,當其可見性狀態改變時。在隱藏和展示事件之間,不需要浪費 CPU 周期準備 (或對用戶顯示信息)。例如:視頻應用程序可能隻需停止生成新的幀。

恰巧被屏幕上其它窗口遮蓋的 Widget 被認為是可見的。同樣適用於圖標化窗口,和存在於另一虛擬桌麵 (在支持此概念的平颱) 中的窗口。Widget 接收自發展示和隱藏事件,當窗口係統改變其映射狀態時,如:自發隱藏事件當用戶最小化窗口時,和自發展示事件當窗口再次還原時。

幾乎從沒必要重實現 setVisible() 函數。若需要改變一些設置在展示 Widget 前,使用 showEvent () 代替。若需要一些初始化延遲,使用 Polish (拋光) 事件並交付給 event () 函數。

訪問函數:

bool isVisible () const
virtual void setVisible (bool visible )

另請參閱 show (), hide (), isHidden (), isVisibleTo (), isMinimized (), showEvent (),和 hideEvent ().

whatsThis : QString

此特性保持 Widget 的 What's This 幫助文本。

默認情況下,此特性包含空字符串。

訪問函數:

QString whatsThis () const
void setWhatsThis ( const QString & )

另請參閱 QWhatsThis , QWidget::toolTip ,和 QWidget::statusTip .

width : const int

此特性保持 Widget 的寬度 (排除任何窗口框架)

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

注意: 不要使用此函數去查找屏幕的寬度在 多屏桌麵 。讀取 此注意事項 瞭解細節。

默認情況下,此特性包含從屬用戶平颱和屏幕幾何體的值。

訪問函數:

int width () const

另請參閱 geometry , height ,和 size .

windowFilePath : QString

此特性保持與 Widget 關聯的文件路徑

此特性僅對窗口有意義。它把文件路徑與窗口關聯。若設置文件路徑,但未設置窗口標題,則 Qt 會把窗口標題設為指定路徑的文件名,獲得使用 QFileInfo::fileName ().

若在任何時候設置瞭窗口標題,則窗口標題優先,且將被展示而非文件路徑字符串。

此外,在 macOS 這還有額外好處,設置 代理圖標 為窗口,假定文件路徑存在。

此特性包含空字符串,若未設置文件路徑。

默認情況下,此特性包含空字符串。

該特性在 Qt 4.4 引入。

訪問函數:

QString windowFilePath () const
void setWindowFilePath (const QString & filePath )

另請參閱 windowTitle and windowIcon .

windowFlags : Qt::WindowFlags

窗口標誌是組閤,構成由類型 (如 Qt::Dialog ) 和零個或多個窗口係統提示 (如 Qt::FramelessWindowHint ).

若 Widget 有類型 Qt::Widget or Qt::SubWindow 並變為窗口 ( Qt::Window , Qt::Dialog ,等),它被放在桌麵 (0, 0) 位置。若 Widget 是窗口並變成 Qt::Widget or Qt::SubWindow ,它被放在相對於其父級 Widget 的 (0, 0) 位置。

注意: 此函數調用 setParent () 當改變窗口標誌時,導緻 Widget 被隱藏。必須調用 show () 以使 Widget 再次變為可見。

訪問函數:

Qt::WindowFlags windowFlags () const
void setWindowFlags (Qt::WindowFlags type )

另請參閱 windowType (), setWindowFlag (),和 窗口標誌範例 .

windowIcon : QIcon

此特性保持 Widget 圖標

此特性僅對窗口有意義。若未設置圖標,windowIcon() 返迴應用程序圖標 ( QApplication::windowIcon ()).

注意: 在 macOS,窗口圖標錶示活動文檔,且不會顯示除非還有設置文件路徑使用 setWindowFilePath .

訪問函數:

QIcon windowIcon () const
void setWindowIcon (const QIcon & icon )

通知程序信號:

void windowIconChanged (const QIcon & icon )

另請參閱 windowTitle and setWindowFilePath .

windowModality : Qt::WindowModality

此特性保持哪些窗口被模態 Widget 所阻塞

此特性僅對窗口有意義。模態 Widget 阻止在其它窗口中的 Widget 獲得輸入。此特性的值控製哪些窗口被阻塞當 Widget 可見時。改變此特性不起作用,當窗口可見時;必須 hide () Widget 首先,然後 show () 它再次。

默認情況下,此特性為 Qt::NonModal .

該特性在 Qt 4.1 引入。

訪問函數:

Qt::WindowModality windowModality () const
void setWindowModality (Qt::WindowModality windowModality )

另請參閱 isWindow (), QWidget::modal ,和 QDialog .

windowModified : bool

此特性保持在窗口中展示的文檔是否有未保存的更改

修改窗口是其內容有改變但尚未保存到磁盤的窗口。此標誌對於各種平颱有不同效果。在 macOS,關閉按鈕將擁有修改外觀;在其它平颱,窗口標題將擁有 * 星號。

窗口標題必須包含 [*] 占位符,指示 * 應用齣現在何處。通常,它應齣現在文件名後右側 (如 document1.txt[*] - Text Editor)。若尚未修改窗口,會簡單移除占位符。

注意,若將 Widget 設為被修改,則其所有祖先也被設為被修改。不管怎樣,若調用 setWindowModified(false) 在 Widget,這不會傳播給其父級,因為父級的其它子級可能已被修改。

訪問函數:

bool isWindowModified () const
void setWindowModified ( bool )

另請參閱 windowTitle , 應用程序範例 , SDI 範例 ,和 MDI 範例 .

windowOpacity : double

此特性保持窗口的不透明度級彆。

不透明度的有效範圍是從 1.0 (完全不透明) 到 0.0 (完全透明)。

默認情況下,此特性的值為 1.0。

此特徵可用於支持復閤擴展的嵌入式 Linux、macOS、Windows 和 X11 平颱。

注意: 在 X11,需要運行復閤管理器,且 X11 的特定 _NET_WM_WINDOW_OPACITY 原子需要所用窗口管理器的支持。

警告: 將此特性從不透明更改為透明可能發齣描繪事件,需要窗口在被正確顯示之前處理。這主要影響使用 QScreen::grabWindow ()。另請注意,半透明窗口的更新和調整大小顯著慢於不透明窗口。

訪問函數:

qreal windowOpacity () const
void setWindowOpacity (qreal level )

另請參閱 setMask ().

windowTitle : QString

此特性保持窗口標題 (Caption 題注)

此特性僅對頂層 Widget (譬如:窗口和對話框) 有意義。若未設置 Caption (題注),則標題基於 windowFilePath 。若都未設置,則標題為空字符串。

若使用 windowModified 機製,窗口標題必須包含 [*] 占位符,指示 * 應齣現在何處。通常,它應齣現在文件名後右側 (如 document1.txt[*] - Text Editor)。若 windowModified 特性為 false (默認),簡單移除占位符。

在某些桌麵平颱 (包括 Windows 和 Unix),應用程序名稱 (來自 QGuiApplication::applicationDisplayName ) 會被添加到窗口標題末尾,若有設置。這是由 QPA 插件來完成的,因此會嚮用戶展示,但不屬於 windowTitle 字符串。

訪問函數:

QString windowTitle () const
void setWindowTitle ( const QString & )

通知程序信號:

void windowTitleChanged (const QString & title )

另請參閱 windowIcon , windowModified ,和 windowFilePath .

x : const int

此特性保持 Widget 相對於其父級 (包括任何窗口框架) 的 X 坐標

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

默認情況下,此特性擁有 0 值。

訪問函數:

int x () const

另請參閱 frameGeometry , y ,和 pos .

y : const int

此特性保持 Widget 相對於其父級且包括任何窗口框架的 Y 坐標

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

默認情況下,此特性擁有 0 值。

訪問函數:

int y () const

另請參閱 frameGeometry , x ,和 pos .

成員函數文檔編製

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

構造子級 Widget 為 parent ,采用 Widget 設置標誌 f .

parent is nullptr ,新的 Widget 變為窗口。若 parent 是另一 Widget,此小部件變成子級窗口在 parent 。新的小部件被刪除當其 parent 被刪除。

Widget 標誌自變量 f ,通常為 0,但可以將它設為定製窗口框架 (即 parent 必須為 nullptr )。要定製框架,使用組成值來自按位 OR 的任何 窗口標誌 .

若將子級 Widget 添加到已經可見的小部件,必須明確展示子級以使其可見。

注意,X11 版本的 Qt 可能無法在所有係統交付樣式標誌的所有組閤。這是因為在 X11,Qt 隻詢問窗口管理器,且窗口管理器可以覆蓋應用程序的設置。在 Windows,Qt 可以設置您想要的任何標誌。

另請參閱 windowFlags .

[slot] bool QWidget:: close ()

關閉此 Widget。返迴 true 若 Widget 被關閉;否則返迴 false .

首先,它嚮 Widget 發送 QCloseEvent 。小部件 hidden 若它 接受 關閉事件。若它 ignores 事件,什麼都不發生。默認實現的 QWidget::closeEvent () 接受關閉事件。

若 Widget 擁有 Qt::WA_DeleteOnClose 標誌,還會刪除 Widget。將關閉事件交付給 Widget,無論小部件是否可見。

The QApplication::lastWindowClosed () 信號被發射,當最後一個可見首要窗口 (即:窗口沒有父級) 具有 Qt::WA_QuitOnClose 屬性設置被關閉。默認情況下,除瞬時窗口 (譬如:閃屏、工具窗口及彈齣菜單) 外,所有 Widget 都有設置此屬性。

[signal] void QWidget:: customContextMenuRequested (const QPoint & pos )

此信號被發射當 Widget 的 contextMenuPolicy is Qt::CustomContextMenu ,且用戶已請求 Widget 的上下文菜單。位置 pos 是 Widget 接收上下文菜單事件的位置。通常,這在 Widget 坐標中。此規則的例外是 QAbstractScrollArea 且其子類把上下文菜單事件映射到坐標為 viewport() .

另請參閱 mapToGlobal (), QMenu ,和 contextMenuPolicy .

[slot] void QWidget:: hide ()

隱藏 Widget。此函數相當於 setVisible (false).

注意: 若正操控 QDialog 或其子類和援引 show () 函數在此函數之後,對話框將顯示在其原始位置。

另請參閱 hideEvent (), isHidden (), show (), setVisible (), isVisible (),和 close ().

[slot] void QWidget:: lower ()

把 Widget 降低到父級 Widget 的堆棧底部。

在此調用之後,Widget 將在視覺上位於 (且因此被遮蓋由) 任何重疊同級小部件後麵。

另請參閱 raise () 和 stackUnder ().

[slot] void QWidget:: raise ()

把此 Widget 提升到父級 Widget 的堆棧頂部。

調用這後,在任何重疊同級 Widget 前的 Widget 將可見。

注意: 當使用 activateWindow (),可以調用此函數以確保窗口堆疊在頂部。

另請參閱 lower () 和 stackUnder ().

[slot] void QWidget:: repaint ()

直接重新繪製 Widget 通過調用 paintEvent () 立即,除非更新被禁用 (或 Widget 被隱藏)。

建議僅當需要立即重新繪製 (例如:動畫期間) 時纔使用 repaint()。在幾乎所有情況下 update () 更好,因為它準許 Qt 優化速度並最小化閃爍。

警告: 若在可以調用本身的函數中調用 repaint() 從 paintEvent (),可能獲得無限遞歸。 update () 函數從不導緻遞歸。

另請參閱 update (), paintEvent (),和 setUpdatesEnabled ().

[slot] void QWidget:: setDisabled ( bool disable )

禁用 Widget 輸入事件若 disable 為 true;否則啓用輸入事件。

enabled 文檔編製,瞭解更多信息。

另請參閱 isEnabledTo (), QKeyEvent , QMouseEvent ,和 changeEvent ().

[slot] void QWidget:: setFocus ()

這是重載函數。

把鍵盤輸入聚焦賦予此 Widget (或其聚焦代理),若此 Widget (或其父級 Widget) 是 活動窗口 .

[slot] void QWidget:: setHidden ( bool hidden )

方便函數,相當於 setVisible (! hidden ).

另請參閱 isHidden ().

[slot] void QWidget:: show ()

展示 Widget 及其子級小部件。

這相當於調用 showFullScreen (), showMaximized (),或 setVisible (true),取決於平颱窗口標記的默認行為。

另請參閱 raise (), showEvent (), hide (), setVisible (), showMinimized (), showMaximized (), showNormal (), isVisible (),和 windowFlags ().

[slot] void QWidget:: showFullScreen ()

以全屏方式展示 Widget。

調用此函數僅影響 windows .

要從全屏模式返迴,調用 showNormal () 或 close ().

注意: 全屏模式在 Windows 工作得很好,在 X 卻有一些問題。這些問題是由於 X11 客戶端和窗口管理器之間指定的 ICCCM (國際計算機和通信管理會議) 通信協議的局限性所緻。ICCCM 簡直不理解非裝飾全屏窗口的概念。因此,能做的最好是請求無邊框窗口,放置並重置其大小以填充整個屏幕。從屬窗口管理器,這可能工作,也可能不工作。使用 MOTIF 提示請求無邊框窗口,至少部分支持所有現代窗口管理器。

替代是完全繞過窗口管理器和創建窗口采用 Qt::X11BypassWindowManagerHint 標誌。雖然,這有其它嚴重問題,像破壞鍵盤焦點、當桌麵改變 (或用戶提升其它窗口) 時效果很奇怪。

遵循後現代 ICCCM 規範的 X11 窗口管理器,能正確支持全屏模式。

在 macOS,全屏展示窗口將使整個應用程序在全屏模式下,為它提供專用桌麵。當應用程序在全屏模式下運行時,展示另一窗口也可能自動使該窗口全屏。為阻止這,退齣全屏模式通過調用 showNormal () 或通過 close () 在全屏窗口,在展示另一窗口之前。

另請參閱 showNormal (), showMaximized (), show (), isVisible (),和 close ().

[slot] void QWidget:: showMaximized ()

最大化展示 Widget。

調用此函數僅影響 windows .

在 X11,此函數可能不正確工作於某些窗口管理器。見 窗口幾何體 文檔編製瞭解解釋。

另請參閱 setWindowState (), showNormal (), showMinimized (), show (), hide (),和 isVisible ().

[slot] void QWidget:: showMinimized ()

以圖標形式最小化展示 Widget。

調用此函數僅影響 windows .

另請參閱 showNormal (), showMaximized (), show (), hide (), isVisible (),和 isMinimized ().

[slot] void QWidget:: showNormal ()

還原 Widget 在它被最大化或最小化之後。

調用此函數僅影響 windows .

另請參閱 setWindowState (), showMinimized (), showMaximized (), show (), hide (),和 isVisible ().

[slot] void QWidget:: update ()

更新 Widget 除非更新被禁用或 Widget 被隱藏。

此函數不會立即導緻重新繪製;相反,它會調度用於處理的描繪事件,當 Qt 返迴到主事件循環時。這準許 Qt 優化以提高速度並減少閃爍相比調用 repaint () 所做的。

多次調用 update() 通常僅僅導緻一次 paintEvent () 調用。

Qt 通常先擦除 Widget 區域再 paintEvent () 調用。若 Qt::WA_OpaquePaintEvent Widget 屬性有設置,Widget 負責采用不透明顔色描繪其所有像素。

另請參閱 repaint (), paintEvent (), setUpdatesEnabled (),和 指針式時鍾範例 .

[protected slot] void QWidget:: updateMicroFocus ()

更新 Widget 的微聚焦。

[signal] void QWidget:: windowIconChanged (const QIcon & icon )

此信號被發射當窗口圖標已改變,采用新的 icon 作為自變量。

注意: 通知程序信號對於特性 windowIcon .

該函數在 Qt 5.2 引入。

[signal] void QWidget:: windowTitleChanged (const QString & title )

此信號被發射當窗口標題已改變,采用新的 title 作為自變量。

注意: 通知程序信號對於特性 windowTitle .

該函數在 Qt 5.2 引入。

[虛擬] QWidget:: ~QWidget ()

銷毀 Widget。

此 Widget 的所有子級被首先刪除。退齣應用程序若此 Widget 是主小部件。

[virtual protected] void QWidget:: actionEvent ( QActionEvent * event )

此事件處理程序被調用采用給定 event 每當 Widget 的動作改變時。

另請參閱 addAction (), insertAction (), removeAction (), actions (),和 QActionEvent .

QList < QAction *> QWidget:: actions () const

返迴此 Widget 的動作列錶 (可能為空)。

另請參閱 contextMenuPolicy , insertAction (),和 removeAction ().

void QWidget:: activateWindow ()

把包含此 Widget 的頂層 Widget,設為活動窗口。

活動窗口是具有鍵盤輸入聚焦的可見頂層窗口。

此函數履行如在頂層窗口標題欄中,點擊鼠標的相同操作。在 X11,結果從屬窗口管理器。若想要確保窗口很好地堆疊在頂部,還應調用 raise ()。注意:窗口必須可見,否則 activateWindow() 無效。

在 Windows,若正調用這在目前不活動的應用程序中時,就不會使之成為活動窗口。它會改變任務欄條目的顔色,指示以某種方式改變窗口。這是因為 Microsoft 不允許應用程序,中斷用戶目前在另一應用程序中所做的。

另請參閱 isActiveWindow (), window (), show (),和 QWindowsWindowFunctions::setWindowActivationBehavior ().

void QWidget:: addAction ( QAction * action )

追加動作 action 到此 Widget 的動作列錶。

所有 QWidget 都擁有列錶化的 QAction ,不管怎樣,可以按多種不同方式圖形錶示它們。默認使用 QAction 列錶 (作為返迴通過 actions ()) 創建上下文 QMenu .

A QWidget 隻應每動作有一個,且已添加動作不會導緻同一動作在 Widget 中齣現 2 次。

所有權對於 action 不會轉移給此 QWidget .

另請參閱 removeAction (), insertAction (), actions (),和 QMenu .

void QWidget:: addActions ( QList < QAction *> actions )

追加動作 actions 到此 Widget 的動作列錶。

另請參閱 removeAction (), QMenu ,和 addAction ().

void QWidget:: adjustSize ()

調節 Widget 大小以擬閤其內容。

此函數使用 sizeHint () 若它有效 (即:大小提示的寬度和高度 >= 0)。否則,它設置大小為覆蓋所有子級 Widget 的子級矩形 (所有子級 Widget 矩形的並集)。

對於窗口,屏幕大小也要考慮在內。若 sizeHint () 小於 (200, 100) 且大小策略為 expanding ,窗口將至少為 (200, 100)。窗口的最大大小是屏幕寬度和高度的 2/3。

另請參閱 sizeHint () 和 childrenRect ().

QPalette::ColorRole QWidget:: backgroundRole () const

返迴 Widget 的背景角色。

背景角色定義筆刷來自 Widget 的 palette 用於渲染背景。

若未明確設置背景角色,Widget 繼承其父級小部件的背景角色。

另請參閱 setBackgroundRole () 和 foregroundRole ().

QBackingStore *QWidget:: backingStore () const

返迴 QBackingStore 將在其中繪製此 Widget。

該函數在 Qt 5.0 引入。

[virtual protected] void QWidget:: changeEvent ( QEvent * event )

此事件處理程序可以重實現,以處理狀態改變。

在此事件中改變的狀態可以被檢索透過 event 供給。

改變事件包括: QEvent::ToolBarChange , QEvent::ActivationChange , QEvent::EnabledChange , QEvent::FontChange , QEvent::StyleChange , QEvent::PaletteChange , QEvent::WindowTitleChange , QEvent::IconTextChange , QEvent::ModifiedChange , QEvent::MouseTrackingChange , QEvent::ParentChange , QEvent::WindowStateChange , QEvent::LanguageChange , QEvent::LocaleChange , QEvent::LayoutDirectionChange , QEvent::ReadOnlyChange .

QWidget *QWidget:: childAt ( int x , int y ) const

返迴可見子級 Widget 在位置 ( x , y ) 在 Widget 坐標係。若指定位置沒有可見子級 Widget,函數返迴 nullptr .

QWidget *QWidget:: childAt (const QPoint & p ) const

這是重載函數。

返迴可見子級 Widget 在點 p 在小部件自己的坐標係中。

void QWidget:: clearFocus ()

從 Widget 獲取鍵盤輸入聚焦。

若 Widget 擁有活動聚焦, 聚焦齣事件 會被發送給此 Widget 以告訴它已失去聚焦。

此 Widget 必須啓用聚焦設置以獲取鍵盤輸入聚焦,即:它必須調用 setFocusPolicy ().

另請參閱 hasFocus (), setFocus (), focusInEvent (), focusOutEvent (), setFocusPolicy (),和 QApplication::focusWidget ().

void QWidget:: clearMask ()

移除任何遮罩設置通過 setMask ().

另請參閱 setMask ().

[virtual protected] void QWidget:: closeEvent ( QCloseEvent * event )

此事件處理程序被調用采用給定 event 當 Qt 收到來自窗口係統頂層 Widget 的關閉請求時。

默認情況下,接受事件並關閉 Widget。可以重實現此函數以改變 Widget 響應窗口關閉請求的方式。例如,可以阻止窗口關閉通過調用 ignore() 在所有事件中。

主窗口應用程序通常使用此函數的重實現,以校驗用戶的工作是否已保存並詢問權限在關閉前。例如, 應用程序範例 使用幫手函數來確定是否關閉窗口:

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (maybeSave()) {
        writeSettings();
        event->accept();
    } else {
        event->ignore();
    }
}
					

另請參閱 event (), hide (), close (), QCloseEvent ,和 應用程序範例 .

QMargins QWidget:: contentsMargins () const

contentsMargins 函數返迴 Widget 的內容邊距。

該函數在 Qt 4.6 引入。

另請參閱 setContentsMargins () 和 contentsRect ().

QRect QWidget:: contentsRect () const

返迴 Widget 邊距內的區域。

另請參閱 setContentsMargins () 和 contentsMargins ().

[virtual protected] void QWidget:: contextMenuEvent ( QContextMenuEvent * event )

此事件處理程序用於事件 event ,可以在子類中被重實現以接收 Widget 上下文菜單事件。

處理程序被調用,當 Widget 的 contextMenuPolicy is Qt::DefaultContextMenu .

默認實現忽略上下文事件。見 QContextMenuEvent 文檔編製瞭解更多細節。

另請參閱 event (), QContextMenuEvent ,和 customContextMenuRequested ().

[protected] void QWidget:: create ( WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true)

創建新 Widget 窗口。

參數 window , initializeWindow ,和 destroyOldWindow 被忽略,在 Qt 5。請使用 QWindow::fromWinId () 以創建 QWindow 包裹外來窗口並把它傳遞給 QWidget::createWindowContainer () 代替。

另請參閱 createWindowContainer () 和 QWindow::fromWinId ().

[static] QWidget *QWidget:: createWindowContainer ( QWindow * window , QWidget * parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

創建 QWidget 使之可能嵌入 window QWidget 基應用程序。

窗口容器的創建是作為子級對於 parent 和采用窗口標誌 flags .

窗口一旦被嵌入容器,容器將控製窗口的幾何體和可見性。明確調用 QWindow::setGeometry (), QWindow::show () 或 QWindow::hide () 在嵌入窗口不推薦。

容器擁有所有權對於 window 。可以從窗口容器中移除窗口采用調用 QWindow::setParent ().

窗口容器是以本機子級窗口形式被附加到頂層窗口作為其子級。當窗口容器被用作子級對於 QAbstractScrollArea or QMdiArea ,它將創建 本機窗口 為其父級鏈中的每個 Widget,以允許在此使用案例中正確地堆疊和裁剪。為窗口容器創建本機窗口也允許正確堆疊並裁剪。這必須在窗口容器展示之前完成。具有許多本機子級窗口的應用程序,可能遭遇性能問題。

窗口容器有許多已知局限性:

  • 堆疊次序;嵌入窗口將以不透明框方式堆疊在 Widget 層次結構頂部。多個重疊窗口容器實例的堆疊次序未定義。
  • 渲染集成;窗口容器無法互操作與 QGraphicsProxyWidget , QWidget::render () 或類似功能。
  • 聚焦處理;它是可能的讓窗口容器實例擁有任何聚焦策略,且它會將聚焦委托給窗口憑藉調用 QWindow::requestActivate ()。不管怎樣,返迴到正常聚焦鏈從 QWindow 實例將取決於 QWindow 實例實現自身。例如,當進入帶 Tab 聚焦基於 Qt Quick 的窗口時,進一步按下 Tab 很可能隻會在 QML 應用程序內循環。另外,是否 QWindow::requestActivate () 實際賦予窗口聚焦,從屬平颱。
  • 使用多個窗口容器實例在 QWidget 基應用程序會大大損害應用程序的整體性能。

[protected] void QWidget:: destroy ( bool destroyWindow = true, bool destroySubWindows = true)

釋放窗口係統資源。銷毀 Widget 窗口,若 destroyWindow 為 true。

destroy() 會為所有子級 Widget 遞歸調用本身,傳遞 destroySubWindows destroyWindow 參數。要更好地控製 Subwidget 的銷毀,請先選擇性地銷毀 Subwidget。

此函數通常被調用從 QWidget 析構函數。

[virtual protected] void QWidget:: dragEnterEvent ( QDragEnterEvent * event )

此事件處理程序被調用,當拖拽正在進行中且鼠標進入此 Widget 時。事件被傳入 event 參數。

若事件被忽略,Widget 不會接收任何 拖拽移動事件 .

拖放文檔編製 瞭解如何為應用程序提供拖放的概述。

另請參閱 QDrag and QDragEnterEvent .

[virtual protected] void QWidget:: dragLeaveEvent ( QDragLeaveEvent * event )

此事件處理程序被調用,當拖拽正在進行中且鼠標離開此 Widget 時。事件被傳入 event 參數。

拖放文檔編製 瞭解如何為應用程序提供拖放的概述。

另請參閱 QDrag and QDragLeaveEvent .

[virtual protected] void QWidget:: dragMoveEvent ( QDragMoveEvent * event )

此事件處理程序被調用,若拖拽正在進行中且發生以下任一條件:光標進入此 Widget、光標在此 Widget 內移動、若按下鍵盤修飾鍵當此 Widget 獲得聚焦時。事件被傳入 event 參數。

拖放文檔編製 瞭解如何為應用程序提供拖放的概述。

另請參閱 QDrag and QDragMoveEvent .

[virtual protected] void QWidget:: dropEvent ( QDropEvent * event )

此事件處理程序被調用,當拖拽掉落在此 Widget 中時。事件被傳入 event 參數。

拖放文檔編製 瞭解如何為應用程序提供拖放的概述。

另請參閱 QDrag and QDropEvent .

WId QWidget:: effectiveWinId () const

返迴 Widget 的有效窗口係統標識符,即:本機父級的窗口係統標識符。

若 Widget 是本機的,此函數返迴本機小部件 ID。否則,返迴首個本機父級 Widget (即:包含此 Widget 的頂層小部件) 的窗口 ID。

注意: 推薦不要存儲此值,因為運行時它可能改變。

該函數在 Qt 4.4 引入。

另請參閱 nativeParentWidget ().

void QWidget:: ensurePolished () const

確保 Widget 及其子級已被拋光,通過 QStyle (即:擁有適當字體和調色闆)。

QWidget 調用此函數在完全構造後,但在首次展示前。可以調用此函數,若想要確保在執行操作前拋光 Widget,如:可能需要正確字體大小在 Widget 的 sizeHint () 重實現。注意:此函數 is 調用自默認實現的 sizeHint ().

拋光對必須在調用所有構造函數 (來自基類及子類) 之後的最終初始化很有用。

若需要改變某些設置當拋光 Widget 時,重實現 event () 和處理 QEvent::Polish 事件類型。

注意: 函數被聲明為 const 以便可以從其它 const 函數中調用它 (如 sizeHint ()).

另請參閱 event ().

[virtual protected] void QWidget:: enterEvent ( QEvent * event )

此事件處理程序可以在子類中重實現,收到的 Widget 進入事件被傳入 event 參數。

事件被發送給 Widget,當鼠標光標進入 Widget 時。

另請參閱 leaveEvent (), mouseMoveEvent (),和 event ().

[override virtual protected] bool QWidget:: event ( QEvent * event )

重實現: QObject::event (QEvent *e).

這是主事件處理程序;它處理事件 event 。可以在子類中重實現此函數,但推薦使用某一專用事件處理程序代替。

按鍵和釋放事件的處理不同於其它事件。event() 檢查 Tab 和 Shift+Tab 並試著適當移動聚焦。若沒有能移動聚焦的 Widget (或按鍵不是 Tab 或 Shift+Tab),event() 調用 keyPressEvent ().

鼠標和數位闆事件的處理還有點特殊:僅當 Widget enabled ,event() 會調用專用處理程序如 mousePressEvent ();否則它會丟棄事件。

此函數返迴 true 若事件被識彆,否則它返迴 false 。若識彆事件被接受 (見 QEvent::accepted ),任何進一步的處理 (譬如:把事件傳播給父級 Widget) 都會停止。

另請參閱 closeEvent (), focusInEvent (), focusOutEvent (), enterEvent (), keyPressEvent (), keyReleaseEvent (), leaveEvent (), mouseDoubleClickEvent (), mouseMoveEvent (), mousePressEvent (), mouseReleaseEvent (), moveEvent (), paintEvent (), resizeEvent (), QObject::event (),和 QObject::timerEvent ().

[static] QWidget *QWidget:: find ( WId id )

返迴的 Widget 指針具有窗口標識符/句柄 id .

窗口標識符類型取決於底層窗口係統,見 qwindowdefs.h 實際定義。若沒有帶此標識符的 Widget, nullptr 被返迴。

[virtual protected] void QWidget:: focusInEvent ( QFocusEvent * event )

此事件處理程序可以在子類中被重實現,以接收 Widget 的鍵盤聚焦事件 (聚焦接收)。事件被傳入 event 參數

Widget 通常必須 setFocusPolicy () 到某事除瞭 Qt::NoFocus 以接收聚焦事件。(注意,應用程序程序員可以調用 setFocus () 在任何 Widget,即使其通常不接受聚焦)

默認實現更新 Widget (除瞭窗口未指定 focusPolicy ()).

另請參閱 focusOutEvent (), setFocusPolicy (), keyPressEvent (), keyReleaseEvent (), event (),和 QFocusEvent .

[protected] bool QWidget:: focusNextChild ()

查找新的 Widget 以給予鍵盤聚焦,如適閤 Tab ,並返迴 true 若能找到新的 Widget,或 false 若找不到。

另請參閱 focusPreviousChild ().

[virtual protected] bool QWidget:: focusNextPrevChild ( bool next )

查找新的 Widget 以賦予鍵盤聚焦,如適閤 Tab 和 Shift+Tab,並返迴 true 若能找到新的 Widget,或 false 若找不到。

next 為 true,此函數嚮前搜索,若 next 為 False,嚮後搜索。

有時,會想要重實現此函數。例如,Web 瀏覽器可以重實現它以嚮前 (或嚮後) 移動其 "當前活動鏈接",且當它到達 "頁麵" 中的最後 1 個 (或第 1 個) 鏈接時纔調用 focusNextPrevidChild()。

子級 Widget 對其父級小部件調用 focusNextPrevidChild(),但僅包含子級 Widget 的窗口能決定要重定嚮聚焦到哪裏。通過重實現對象的此函數,可以控製所有子級 Widget 的聚焦遍曆。

另請參閱 focusNextChild () 和 focusPreviousChild ().

[virtual protected] void QWidget:: focusOutEvent ( QFocusEvent * event )

此事件處理程序可以在子類中被重實現,以接收 Widget 的鍵盤聚焦事件 (聚焦丟失)。事件被傳入 event 參數。

Widget 通常必須 setFocusPolicy () 到某事除瞭 Qt::NoFocus 以接收聚焦事件。(注意,應用程序程序員可以調用 setFocus () 在任何 Widget,即使其通常不接受聚焦)

默認實現更新 Widget (除瞭窗口未指定 focusPolicy ()).

另請參閱 focusInEvent (), setFocusPolicy (), keyPressEvent (), keyReleaseEvent (), event (),和 QFocusEvent .

[protected] bool QWidget:: focusPreviousChild ()

查找新的 Widget 以給予鍵盤聚焦,如適閤 Shift+Tab ,並返迴 true 若能找到新的 Widget,或 false 若找不到。

另請參閱 focusNextChild ().

QWidget *QWidget:: focusProxy () const

返迴聚焦代理,或 nullptr 若沒有聚焦代理。

另請參閱 setFocusProxy ().

QWidget *QWidget:: focusWidget () const

返迴最後子級,當此小部件 setFocus 被調用。對於頂層 Widget,這是窗口被激活的情況下獲得聚焦的小部件

這不同於 QApplication::focusWidget (),其返迴在目前活動窗口中的聚焦 Widget。

QFontInfo QWidget:: fontInfo () const

返迴 Widget 當前字體的字體信息。相當於 QFontInfo(widget->font()) .

另請參閱 font (), fontMetrics (),和 setFont ().

QFontMetrics QWidget:: fontMetrics () const

返迴 Widget 當前字體的字體規格。相當於 QFontMetrics(widget->font()) .

另請參閱 font (), fontInfo (),和 setFont ().

QPalette::ColorRole QWidget:: foregroundRole () const

返迴前景角色。

前景角色定義顔色來自 Widget 的 palette 用於繪製前景。

若未明確設置前景角色,函數返迴對比後颱角色的角色。

另請參閱 setForegroundRole () 和 backgroundRole ().

QPixmap QWidget:: grab (const QRect & rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))

把 Widget 渲染成像素圖,限定通過給定 rectangle 。若 Widget 有任何子級,還會在適當位置描繪它們。

若指定具有無效尺寸 (默認) 的矩形,描繪整個 Widget。

注意: 此函數可以被援引,通過元對象係統和從 QML。見 Q_INVOKABLE .

該函數在 Qt 5.0 引入。

另請參閱 render () 和 QPixmap .

void QWidget:: grabGesture ( Qt::GestureType gesture , Qt::GestureFlags flags = Qt::GestureFlags())

使 Widget 訂閱給定 gesture 采有特有 flags .

該函數在 Qt 4.6 引入。

另請參閱 ungrabGesture () 和 QGestureEvent .

void QWidget:: grabKeyboard ()

抓取鍵盤輸入。

此 Widget 接收所有鍵盤事件直到 releaseKeyboard () 被調用;其它 Widget 根本沒有鍵盤事件。鼠標事件不受影響。使用 grabMouse () 若想要抓取這。

聚焦 Widget 不受影響,除瞭它不接收任何鍵盤事件。 setFocus () 照常移動聚焦,但新聚焦 Widget 接收鍵盤事件,僅在 releaseKeyboard () 被調用。

若另一 Widget 目前正抓取鍵盤輸入,會先釋放該 Widget 的抓取。

另請參閱 releaseKeyboard (), grabMouse (), releaseMouse (),和 focusWidget ().

void QWidget:: grabMouse ()

抓取鼠標輸入。

此 Widget 接收所有鼠標事件直到 releaseMouse () 被調用;其它 Widget 根本沒有鼠標事件。鍵盤事件不受影響。使用 grabKeyboard () 若想要抓取這。

警告: 以鼠標抓取應用程序的 Bug 會經常鎖定終端。使用此函數要極其謹慎,並考慮使用 -nograb 命令行選項當調試時。

抓取鼠標幾乎從不必要當使用 Qt 時,因為 Qt 會理智抓取並釋放鼠標。尤其,當按下鼠標按鈕時,Qt 會抓住鼠標並保持它直到釋放最後一個按鈕。

注意: 僅可見 Widget 可以抓取鼠標輸入。若 isVisible () 返迴 false 對於 Widget,小部件無法調用 grabMouse()。

注意: 在 Windows,grabMouse() 僅當鼠標位於進程所擁有的窗口內時纔工作。在 macOS,grabMouse() 僅當鼠標位於該 Widget 框架內時纔工作。

另請參閱 releaseMouse (), grabKeyboard (),和 releaseKeyboard ().

void QWidget:: grabMouse (const QCursor & cursor )

此函數重載 grabMouse()。

抓取鼠標輸入和改變光標形狀。

光標會假定形狀 cursor (對於隻要鼠標聚焦被抓住) 且此 Widget 將是接收鼠標事件的唯一小部件直到 releaseMouse () 被 called()。

警告: 抓取鼠標可能鎖定終端。

注意: 見注意事項在 QWidget::grabMouse ().

另請參閱 releaseMouse (), grabKeyboard (), releaseKeyboard (),和 setCursor ().

int QWidget:: grabShortcut (const QKeySequence & key , Qt::ShortcutContext context = Qt::WindowShortcut)

將快捷方式添加到 Qt 快捷方式看守係統為給定 key 序列在給定 context 。若 context is Qt::ApplicationShortcut ,快捷方式適用於整個應用程序。否則,要麼本地到此小部件 Qt::WidgetShortcut ,或到窗口自身 Qt::WindowShortcut .

若相同 key 序列有被幾個 Widget 所抓取,當 key 序列齣現 QEvent::Shortcut 事件以不確定次序發送給應用它的所有 Widget,但將 "ambiguous (歧義)" 標誌設為 true。

警告: 通常不需要使用此函數;而是創建 QAction 采用要求的快捷鍵序列 (若還想要等效菜單選項和工具欄按鈕),或創建 QShortcut 若僅僅需要鍵序列。 QAction and QShortcut 會為您處理所有事件過濾,並提供當用戶觸發鍵序列時觸發的信號,所以比此低級函數更易於使用。

另請參閱 releaseShortcut () 和 setShortcutEnabled ().

QGraphicsEffect *QWidget:: graphicsEffect () const

graphicsEffect 函數返迴指嚮 Widget 圖形效果的指針。

若 Widget 沒有圖形效果, nullptr 被返迴。

該函數在 Qt 4.6 引入。

另請參閱 setGraphicsEffect ().

QGraphicsProxyWidget *QWidget:: graphicsProxyWidget () const

返迴嵌入圖形視圖的相應 Widget 代理小部件;否則返迴 nullptr .

該函數在 Qt 4.5 引入。

另請參閱 QGraphicsProxyWidget::createProxyForChildWidget () 和 QGraphicsScene::addWidget ().

bool QWidget:: hasEditFocus () const

返迴 true 若此 Widget 目前擁有編輯焦點;否則 false。

此特徵隻可用於 Qt for Embedded Linux。

另請參閱 setEditFocus () 和 QApplication::navigationMode ().

[虛擬] bool QWidget:: hasHeightForWidth () const

返迴 true 若 Widget 的首選高度取決於其寬度;否則返迴 false .

該函數在 Qt 5.0 引入。

[虛擬] int QWidget:: heightForWidth ( int w ) const

返迴此 Widget 的首選高度,給定寬度 w .

若此 Widget 擁有布局,默認實現將返迴布局的首選高度。若沒有布局,默認實現返迴 -1,指示首選高度不依賴寬度。

[virtual protected] void QWidget:: hideEvent ( QHideEvent * event )

此事件處理程序可以在子類中重實現,以接收 Widget 隱藏事件。事件被傳入 event 參數。

隱藏事件被立即發送給 Widget 在它們被隱藏後。

注意:Widget 接收自發展示和隱藏事件,當通過窗口係統改變其映射狀態時 (如:自發隱藏事件當用戶最小化窗口時,和自發展示事件當再次還原窗口時)。在收到自發隱藏事件後仍認為 Widget 可見,當意識到 isVisible ().

另請參閱 visible , event (),和 QHideEvent .

[override virtual protected] void QWidget:: initPainter ( QPainter * painter ) const

初始化 painter 鋼筆、背景及字體到如同給定 Widget 的。自動調用此函數,當描繪器被打開在 QWidget .

[virtual protected] void QWidget:: inputMethodEvent ( QInputMethodEvent * event )

此事件處理程序用於事件 event ,可以在子類中重實現以接收輸入法閤成事件。處理程序被調用,當輸入法狀態改變時。

注意:當創建自定義文本編輯 Widget 時, Qt::WA_InputMethodEnabled 窗口屬性必須被明確設置 (使用 setAttribute () 函數) 為接收輸入法事件。

默認實現調用 event->ignore(),拒絕輸入法事件。見 QInputMethodEvent 文檔編製瞭解更多細節。

另請參閱 event () 和 QInputMethodEvent .

[虛擬] QVariant QWidget:: inputMethodQuery ( Qt::InputMethodQuery query ) const

此方法僅與輸入 Widget 相關。輸入法使用它查詢 Widget 的一組特性,以便能夠支持復雜輸入法操作,作為對環繞文本和重新轉換的支持。

query 指定查詢特性。

另請參閱 inputMethodEvent (), QInputMethodEvent , QInputMethodQueryEvent ,和 inputMethodHints .

void QWidget:: insertAction ( QAction * before , QAction * action )

插入動作 action 到此 Widget 的動作列錶,前置於動作 before 。它追加動作,若 before is nullptr or before 不是有效動作 (對於此 Widget)。

A QWidget 每動作隻應有一個。

另請參閱 removeAction (), addAction (), QMenu , contextMenuPolicy ,和 actions ().

void QWidget:: insertActions ( QAction * before , QList < QAction *> actions )

插入動作 actions 到此 Widget 的動作列錶,前置於動作 before 。它追加動作,若 before is nullptr or before 不是有效動作 (對於此 Widget)。

A QWidget 每動作最多能有一個。

另請參閱 removeAction (), QMenu , insertAction (),和 contextMenuPolicy .

bool QWidget:: isAncestorOf (const QWidget * child ) const

返迴 true 若此 Widget 是父級 (或祖父級等任何級彆),針對給定 child ,且兩 Widget 在同一窗口;否則返迴 false .

bool QWidget:: isEnabledTo (const QWidget * ancestor ) const

返迴 true 若此 Widget 將變為被啓用,若 ancestor 被啓用;否則返迴 false .

就是這種情況若不是 Widget 本身或每個父級直到,但排除 ancestor 已被明確禁用。

isEnabledTo(0) 返迴 false 若此 Widget 或其任何祖先被明確禁用。

這裏的祖先一詞是指在相同窗口中的父級 Widget。

因此 isEnabledTo(0) 停止在此 Widget 窗口,不像 isEnabled () 還會考慮父級窗口。

另請參閱 setEnabled () 和 enabled .

bool QWidget:: isHidden () const

返迴 true 若 Widget 被隱藏,否則返迴 false .

隱藏 Widget 纔變為可見當 show () 被它調用時。它不會自動展示當展示父級時。

要校驗可見性,使用 ! isVisible () 代替 (注意感嘆號)。

isHidden() 隱含 ! isVisible (),但 Widget 可以不可見且同時不被隱藏。對於是不可見 Widget 的子級小部件,就是這種情況。

Widget 被隱藏若:

  • 它們的創建是作為獨立窗口,
  • 它們的創建是作為可見 Widget 的子級,
  • hide () 或 setVisible (false) 被調用。

bool QWidget:: isVisibleTo (const QWidget * ancestor ) const

返迴 true 當此 Widget 變為可見若 ancestor 被展示;否則返迴 false .

true 情況齣現,若 Widget 本身 (或任何父級) 直到但排除 ancestor 已被明確隱藏。

此函數仍將返迴 true,若 Widget 被其它屏幕窗口遮擋,但可以是物理可見的,若它或它們要被移動。

isVisibleTo(0) 等同於 isVisible ().

另請參閱 show (), hide (),和 isVisible ().

bool QWidget:: isWindow () const

返迴 true 若 Widget 是獨立窗口,否則返迴 false .

窗口不是任何其它可見小部件的子級 Widget,通常擁有框架和 窗口標題 .

窗口可以擁有 父級 Widget 。那麼,它將與其父級被分組在一起和被刪除當父級被刪除時,它將最小化當父級被最小化時,等。若窗口管理器支持,它還擁有如其父級的常見任務欄條目。

QDialog and QMainWindow Widget 默認是窗口,即使在構造函數中有指定父級 Widget。此行為的指定通過 Qt::Window 標誌。

另請參閱 window (), isModal (),和 parentWidget ().

[virtual protected] void QWidget:: keyPressEvent ( QKeyEvent * event )

此事件處理程序用於事件 event ,可以在子類中被重實現以接收 Widget 按鍵事件。

Widget 必須調用 setFocusPolicy () 以接受初始聚焦並擁有焦點為接收鍵按下事件。

若重實現此處理程序,則調用基類實現很重要若按鍵不行動。

默認實現關閉彈齣 Widget 若用戶按下鍵序列 QKeySequence::Cancel (通常指 Escape 鍵)。否則,事件被忽略,以便 Widget 父級可以解釋它。

注意, QKeyEvent 開始采用 isAccepted() == true,因此不需要調用 QKeyEvent::accept () - 僅僅不調用基類實現若按鍵有行動。

另請參閱 keyReleaseEvent (), setFocusPolicy (), focusInEvent (), focusOutEvent (), event (), QKeyEvent ,和 俄羅斯方塊範例 .

[virtual protected] void QWidget:: keyReleaseEvent ( QKeyEvent * event )

此事件處理程序用於事件 event ,可以在子類中被重實現以接收 Widget 按鍵釋放事件。

Widget 必須 接受聚焦 初始和 擁有焦點 為接收鍵釋放事件。

若重實現此處理程序,則調用基類實現很重要若按鍵不行動。

默認實現忽略事件,以便 Widget 父級可以解釋它。

注意, QKeyEvent 開始采用 isAccepted() == true,因此不需要調用 QKeyEvent::accept () - 僅僅不調用基類實現若按鍵有行動。

另請參閱 keyPressEvent (), QEvent::ignore (), setFocusPolicy (), focusInEvent (), focusOutEvent (), event (),和 QKeyEvent .

[static] QWidget *QWidget:: keyboardGrabber ()

返迴目前正抓取鍵盤輸入的 Widget。

若在此應用程序中目前沒有 Widget 正抓取鍵盤, nullptr 被返迴。

另請參閱 grabMouse () 和 mouseGrabber ().

QLayout *QWidget:: layout () const

返迴安裝在此 Widget 上的布局管理器,或 nullptr 若未安裝布局管理器。

布局管理器設置已添加到布局的 Widget 子級的幾何體。

另請參閱 setLayout (), sizePolicy (),和 布局管理 .

[virtual protected] void QWidget:: leaveEvent ( QEvent * event )

此事件處理程序可以在子類中重實現,收到的 Widget 離開事件被傳入 event 參數。

離開事件被發送給 Widget 當鼠標光標離開 Widget 時。

另請參閱 enterEvent (), mouseMoveEvent (),和 event ().

QPoint QWidget:: mapFrom (const QWidget * parent , const QPoint & pos ) const

翻譯 Widget 坐標 pos 從坐標係為 parent 到此 Widget 的坐標係。 parent 不得為 nullptr 且必須是調用 Widget 的父級。

另請參閱 mapTo (), mapFromParent (), mapFromGlobal (),和 underMouse ().

QPoint QWidget:: mapFromGlobal (const QPoint & pos ) const

翻譯全局屏幕坐標 pos 到 Widget 坐標。

另請參閱 mapToGlobal (), mapFrom (),和 mapFromParent ().

QPoint QWidget:: mapFromParent (const QPoint & pos ) const

翻譯父級 Widget 坐標 pos 到 Widget 坐標。

如同 mapFromGlobal () 若 Widget 沒有父級。

另請參閱 mapToParent (), mapFrom (), mapFromGlobal (),和 underMouse ().

QPoint QWidget:: mapTo (const QWidget * parent , const QPoint & pos ) const

翻譯 Widget 坐標 pos 到坐標係為 parent parent 不得為 nullptr 且必須是調用 Widget 的父級。

另請參閱 mapFrom (), mapToParent (), mapToGlobal (),和 underMouse ().

QPoint QWidget:: mapToGlobal (const QPoint & pos ) const

翻譯 Widget 坐標 pos 到全局屏幕坐標。例如: mapToGlobal(QPoint(0,0)) 將給齣 Widget 左上像素的全局坐標。

另請參閱 mapFromGlobal (), mapTo (),和 mapToParent ().

QPoint QWidget:: mapToParent (const QPoint & pos ) const

翻譯 Widget 坐標 pos 到父級 Widget 坐標。

如同 mapToGlobal () 若 Widget 沒有父級。

另請參閱 mapFromParent (), mapTo (), mapToGlobal (),和 underMouse ().

QRegion QWidget:: mask () const

返迴 Widget 目前設置的遮罩。若遮罩未設置,返迴值是空區域。

另請參閱 setMask (), clearMask (), QRegion::isEmpty (),和 異形時鍾範例 .

[override virtual protected] int QWidget:: metric ( QPaintDevice::PaintDeviceMetric m ) const

重實現: QPaintDevice::metric (QPaintDevice::PaintDeviceMetric metric) const.

內部實現的虛擬 QPaintDevice::metric () 函數。

m 是要獲得的指標。

[virtual protected] void QWidget:: mouseDoubleClickEvent ( QMouseEvent * event )

此事件處理程序用於事件 event ,可以在子類中重實現以接收 Widget 的鼠標雙擊事件。

默認實現調用 mousePressEvent ().

注意: Widget 還接收鼠標按下和鼠標釋放事件,除雙擊事件外。若和此 Widget 重疊的另一 Widget 在響應按下 (或釋放) 事件時消失,那麼此 Widget 將隻接收雙擊事件。由開發者來確保應用程序正確地解釋這些事件。

另請參閱 mousePressEvent (), mouseReleaseEvent (), mouseMoveEvent (), event (),和 QMouseEvent .

[static] QWidget *QWidget:: mouseGrabber ()

返迴目前正抓取鼠標輸入的 Widget。

若在此應用程序中目前沒有 Widget 正抓取鼠標, nullptr 被返迴。

另請參閱 grabMouse () 和 keyboardGrabber ().

[virtual protected] void QWidget:: mouseMoveEvent ( QMouseEvent * event )

此事件處理程序用於事件 event ,可以在子類中重實現以接收 Widget 的鼠標移動事件。

若鼠標追蹤被切換為關,纔發生鼠標移動事件,當移動鼠標按下鼠標按鈕時。若鼠標追蹤被切換為開,會發生鼠標移動事件,即使鼠標按鈕未按下。

QMouseEvent::pos () 報告相對於此 Widget 的鼠標光標位置。對於按下和釋放事件,位置通常和最後鼠標移動事件的位置相同,但若用戶手抖,位置可能不同。這是底層窗口係統的特徵,不是 Qt 的。

若想在移動鼠標時立即展示工具提示 (如:獲取鼠標坐標采用 QMouseEvent::pos () 並將它們展示成工具提示),必須首先啓用如上所述的鼠標跟蹤。然後,為確保能立即更新工具提示,必須調用 QToolTip::showText () 而不是 setToolTip () 在 mouseMoveEvent() 實現中。

另請參閱 setMouseTracking (), mousePressEvent (), mouseReleaseEvent (), mouseDoubleClickEvent (), event (), QMouseEvent ,和 塗鴉範例 .

[virtual protected] void QWidget:: mousePressEvent ( QMouseEvent * event )

此事件處理程序用於事件 event ,可以在子類中被重實現以接收 Widget 鼠標按下事件。

若在 mousePressEvent() 中創建新的 Widget,那麼 mouseReleaseEvent () 可能不在期望地方結束,從屬底層窗口係統 (或 X11 窗口管理器)、Widget 位置、等等。

默認實現是實現關閉彈齣 Widget,當在窗口外點擊時。對於其它 Widget 類型,什麼都不做。

另請參閱 mouseReleaseEvent (), mouseDoubleClickEvent (), mouseMoveEvent (), event (), QMouseEvent ,和 塗鴉範例 .

[virtual protected] void QWidget:: mouseReleaseEvent ( QMouseEvent * event )

此事件處理程序用於事件 event ,可以在子類中被重實現以接收 Widget 鼠標釋放事件。

另請參閱 mousePressEvent (), mouseDoubleClickEvent (), mouseMoveEvent (), event (), QMouseEvent ,和 塗鴉範例 .

void QWidget:: move ( int x , int y )

這是重載函數。

這相當於 move( QPoint ( x , y )).

注意: setter 函數對於特性 pos .

[virtual protected] void QWidget:: moveEvent ( QMoveEvent * event )

此事件處理程序可以在子類中重實現,收到的 Widget 移動事件被傳入 event 參數。當 Widget 收到此事件時,它已在新位置。

舊位置可訪問透過 QMoveEvent::oldPos ().

另請參閱 resizeEvent (), event (), move (),和 QMoveEvent .

[virtual protected] bool QWidget:: nativeEvent (const QByteArray & eventType , void * message , long * result )

此特殊事件處理程序可以在子類中重實現以接收本機平颱事件,標識通過 eventType 其被傳入 message 參數。

在此函數的重實現中,若想要停止 Qt 正處理的事件,返迴 true 並設置 result result 參數僅對 Windows 有意義。若返迴 false,此本機事件被傳迴 Qt,將事件翻譯成 Qt 事件並將它發送給 Widget。

注意: 事件纔被交付給此事件處理程序,若 Widget 具有本機窗口句柄。

注意: 此函數取代 Qt 4 的事件過濾器函數 x11Event() winEvent() 及 macEvent()。

平颱 事件類型標識符 消息類型 結果類型
Windows "windows_generic_MSG" MSG * LRESULT
macOS "NSEvent" NSEvent *
XCB "xcb_generic_event_t" xcb_generic_event_t *

另請參閱 QAbstractNativeEventFilter .

QWidget *QWidget:: nativeParentWidget () const

返迴此 Widget 的本機父級 (即:具有係統標識符的下一祖先小部件) 或 nullptr 若它沒有任何本機父級。

該函數在 Qt 4.4 引入。

另請參閱 effectiveWinId ().

QWidget *QWidget:: nextInFocusChain () const

返迴在此 Widget 聚焦鏈中的下一小部件。

另請參閱 previousInFocusChain ().

void QWidget:: overrideWindowFlags ( Qt::WindowFlags flags )

將 Widget 窗口標誌設為 flags , without 告訴窗口係統。

警告: 不要調用此函數,除非真的知道要做什麼。

另請參閱 setWindowFlags ().

[override virtual] QPaintEngine *QWidget:: paintEngine () const

重實現: QPaintDevice::paintEngine () const.

返迴 Widget 的描繪引擎。

注意:此函數不應該由用戶明確調用,因為它僅意味著重實現目的。函數由 Qt 內部調用,且默認實現可能並不總是返迴有效指針。

[virtual protected] void QWidget:: paintEvent ( QPaintEvent * event )

此事件處理程序可以在子類中重實現,收到的描繪事件被傳入 event .

描繪事件是重新描繪 Widget 全部或局部的請求。它能發生是因為下列原因之一:

  • repaint () 或 update () 被援引,
  • Widget 被遮蓋且現被發現,或
  • 許多其它原因。

許多 Widget 可以在要求時僅重新描繪其整個錶麵,但一些緩慢 Widget 需要通過隻描繪請求區域進行優化: QPaintEvent::region ()。此速度優化不改變結果,因為描繪會被裁剪到該區域 (在事件處理期間)。 QListView and QTableView 會這樣做,例如。

Qt 還試著通過把多個描繪事件閤並成一個以加速描繪。當 update () 被多次調用或窗口係統發送多個描繪事件,Qt 把這些事件閤並成具有更大區域的一個事件 (見 QRegion::united ())。 repaint () 函數不準許進行此種優化,因此建議使用 update () 每當可能時。

當齣現描繪事件時,通常已擦除更新區域,因此是在 Widget 的背景中描繪。

可以設置背景使用 setBackgroundRole () 和 setPalette ().

從 Qt 4.0 起, QWidget 自動雙緩衝其描繪,所以不需要在 paintEvent() 中編寫雙緩衝代碼以避免閃爍。

注意: 一般來說,應剋製調用 update () 或 repaint () inside paintEvent()。例如,調用 update () 或 repaint () 在 paintEvent() 內子級會導緻未定義行為;子級可能 (或不可能) 獲得描繪事件。

警告: 若正使用沒有 Qt Backingstore (後備存儲) 的自定義描繪引擎, Qt::WA_PaintOnScreen 必須設置。否則, QWidget::paintEngine () 將從不被調用;代之,將使用 Backingstore (後備存儲)。

另請參閱 event (), repaint (), update (), QPainter , QPixmap , QPaintEvent ,和 指針式時鍾範例 .

QWidget *QWidget:: parentWidget () const

返迴此 Widget 的父級,或 nullptr 若它沒有任何父級 Widget。

QWidget *QWidget:: previousInFocusChain () const

previousInFocusChain 函數返迴此 Widget 聚焦鏈中的上一小部件。

該函數在 Qt 4.6 引入。

另請參閱 nextInFocusChain ().

void QWidget:: releaseKeyboard ()

釋放鍵盤抓取。

另請參閱 grabKeyboard (), grabMouse (),和 releaseMouse ().

void QWidget:: releaseMouse ()

釋放鼠標抓取。

另請參閱 grabMouse (), grabKeyboard (),和 releaseKeyboard ().

void QWidget:: releaseShortcut ( int id )

刪除快捷方式采用給定 id 從 Qt 的快捷方式係統。Widget 將不再接收 QEvent::Shortcut 事件對於快捷方式鍵序列 (除非它有具有相同鍵序列的其它快捷方式)。

警告: 通常應該不需要使用此函數,因為 Qt 的快捷方式係統會自動移除快捷方式,當它們的父級 Widget 被銷毀時。最好使用 QAction or QShortcut 處理快捷方式,因為它們比此低級函數更易於使用。另請注意,此操作很昂貴。

另請參閱 grabShortcut () 和 setShortcutEnabled ().

void QWidget:: removeAction ( QAction * action )

移除動作 action 從此 Widget 的動作列錶。

另請參閱 insertAction (), actions (),和 insertAction ().

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

渲染 sourceRegion 的此 Widget 到 target 使用 renderFlags 以確定如何渲染。渲染始於 targetOffset target 。例如:

QPixmap pixmap(widget->size());
widget->render(&pixmap);
					

sourceRegion 是 null 區域,此函數將使用 QWidget::rect () 作為區域,即:整個 Widget。

確保調用 QPainter::end () 為 target 設備的活動描繪器 (若有的話) 在渲染之前。例如:

QPainter painter(this);
...
painter.end();
myWidget->render(this);
					

注意: 要獲得內容對於 QOpenGLWidget ,使用 QOpenGLWidget::grabFramebuffer () 代替。

注意: 要獲得 QGLWidget (棄用) 的內容,使用 QGLWidget::grabFrameBuffer() 或 QGLWidget::renderPixmap() 代替。

該函數在 Qt 4.3 引入。

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

這是重載函數。

將 Widget 渲染到 painter 's QPainter::device ().

變換和設置應用於 painter 將被使用當渲染時。

注意: The painter 必須是活動的。在 macOS 將把 Widget 渲染到 QPixmap 然後繪製通過 painter .

另請參閱 QPainter::device ().

void QWidget:: repaint ( int x , int y , int w , int h )

這是重載函數。

此版本重新描繪矩形 ( x , y , w , h ) 在 Widget 內。

w 是負的,它被替換采用 width() - x ,且若 h 是負的,它會被替換采用 height() - y .

void QWidget:: repaint (const QRect & rect )

這是重載函數。

此版本重新描繪矩形 rect 在 Widget 內。

void QWidget:: repaint (const QRegion & rgn )

這是重載函數。

此版本重新描繪區域 rgn 在 Widget 內。

void QWidget:: resize ( int w , int h )

這是重載函數。

這相當於 resize( QSize ( w , h )).

注意: setter 函數對於特性 size .

[virtual protected] void QWidget:: resizeEvent ( QResizeEvent * event )

此事件處理程序可以在子類中重實現,收到的 Widget 重置大小事件被傳入 event 參數。當 resizeEvent() 被調用時,Widget 已經有新的幾何體。舊尺寸是可訪問的透過 QResizeEvent::oldSize ().

Widget 將被擦除並立即接收描繪事件,在處理重置尺寸事件後。無需 (或應該) 在此處理程序內完成繪製。

另請參閱 moveEvent (), event (), resize (), QResizeEvent , paintEvent (),和 塗鴉範例 .

bool QWidget:: restoreGeometry (const QByteArray & geometry )

還原頂層 Widget 的幾何體和狀態,存儲在字節數組 geometry 。返迴 true 當成功時;否則返迴 false .

若還原幾何體離屏,它將被修改為在可用屏幕幾何體內。

要還原保存幾何體使用 QSettings ,可以使用的代碼像這樣:

QSettings settings("MyCompany", "MyApp");
myWidget->restoreGeometry(settings.value("myWidget/geometry").toByteArray());
					

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

使用 QMainWindow::restoreState () 以還原幾何體、工具欄和停放 Widget 狀態。

該函數在 Qt 4.2 引入。

另請參閱 saveGeometry (), QSettings , QMainWindow::saveState (),和 QMainWindow::restoreState ().

QByteArray QWidget:: saveGeometry () const

保存頂層 Widget 的當前幾何體及狀態。

要在窗口關閉時保存幾何體,可以實現像這樣的關閉事件:

void MyWidget::closeEvent(QCloseEvent *event)
{
    QSettings settings("MyCompany", "MyApp");
    settings.setValue("geometry", saveGeometry());
    QWidget::closeEvent(event);
}
					

窗口幾何體 文檔編製,瞭解有關窗口幾何體問題的概述。

使用 QMainWindow::saveState () 以保存工具欄和停放 Widget 的幾何體及狀態。

該函數在 Qt 4.2 引入。

另請參閱 restoreGeometry (), QMainWindow::saveState (),和 QMainWindow::restoreState ().

QScreen *QWidget:: screen () const

返迴 Widget 所在的屏幕。

該函數在 Qt 5.14 引入。

另請參閱 windowHandle ().

void QWidget:: scroll ( int dx , int dy )

捲動 Widget 包括其子級 dx 像素到右側和 dy 嚮下。兩者 dx and dy 可能為負值。

在捲動之後,Widget 將接收需要重新描繪區域的描繪事件。對於 Qt 知道是不透明的 Widget,這隻是新近暴露部分。例如,若不透明 Widget 嚮左滾動 8 像素,則隻有右邊緣 8 像素寬條紋需要更新。

由於 Widget 默認傳播其父級內容,因此需要設置 autoFillBackground 特性,或使用 setAttribute () 去設置 Qt::WA_OpaquePaintEvent 屬性,以使 Widget 變得不透明。

對於使用內容傳播的 Widget,捲動將導緻整個捲動區域的更新。

另請參閱 透明度和雙緩衝 .

void QWidget:: scroll ( int dx , int dy , const QRect & r )

這是重載函數。

此版本僅捲動 r 且不會移動 Widget 子級。

r 為空或無效,結果不確定。

另請參閱 QScrollArea .

void QWidget:: setAttribute ( Qt::WidgetAttribute attribute , bool on = true)

設置屬性 attribute 在此 Widget 若 on 為 true;否則清零屬性。

另請參閱 testAttribute ().

void QWidget:: setBackgroundRole ( QPalette::ColorRole role )

將 Widget 背景角色設為 role .

背景角色定義筆刷來自 Widget 的 palette 用於渲染背景。

role is QPalette::NoRole ,則 Widget 繼承其父級的背景角色。

注意,樣式能從調色闆自由選取任何顔色。可以修改調色闆或設置樣式錶,若采用 setBackgroundRole() 未達到想要的結果。

另請參閱 backgroundRole () 和 foregroundRole ().

void QWidget:: setBaseSize ( int basew , int baseh )

這是重載函數。

此相當於 setBaseSize( QSize ( basew , baseh ))。將 Widget 的基尺寸設為寬度 basew 和高度 baseh .

注意: setter 函數對於特性 baseSize .

void QWidget:: setContentsMargins ( int left , int top , int right , int bottom )

將圍繞 Widget 內容的邊距設為擁有尺寸 left , top , right ,和 bottom 。邊距用於布局係統,且可以用於子類以指定要在其中 (如:不包括框架) 繪製的區域。

更改邊距將觸發 resizeEvent ().

另請參閱 contentsRect () 和 contentsMargins ().

void QWidget:: setContentsMargins (const QMargins & margins )

這是重載函數。

setContentsMargins 函數設置圍繞 Widget 內容的邊距。

設置圍繞 Widget 內容的邊距大小,確定通過 margins 。邊距用於布局係統,且可以用於子類以指定要在其中 (如:不包括框架) 繪製的區域。

更改邊距將觸發 resizeEvent ().

該函數在 Qt 4.6 引入。

另請參閱 contentsRect () 和 contentsMargins ().

void QWidget:: setEditFocus ( bool enable )

enable 為 true,使此 Widget 擁有編輯聚焦,在這種情況下 Qt::Key_Up and Qt::Key_Down 通常將被交付給 Widget;否則, Qt::Key_Up and Qt::Key_Down 被用於改變聚焦。

此特徵隻可用於 Qt for Embedded Linux。

另請參閱 hasEditFocus () 和 QApplication::navigationMode ().

void QWidget:: setFixedHeight ( int h )

將 Widget 的最小和最大高度設為 h 不改變寬度。為方便起見提供。

另請參閱 sizeHint (), minimumSize (), maximumSize (),和 setFixedSize ().

void QWidget:: setFixedSize (const QSize & s )

將 Widget 的最小和最大尺寸設為 s ,從而阻止其增長 (或收縮)。

這將覆蓋默認尺寸約束設置通過 QLayout .

要移除約束,將尺寸設為 QWIDGETSIZE_MAX .

另外,若想要 Widget 基於其內容擁有固定大小,可以調用 QLayout::setSizeConstraint ( QLayout::SetFixedSize );

另請參閱 maximumSize and minimumSize .

void QWidget:: setFixedSize ( int w , int h )

這是重載函數。

把 Widget 的寬度設置為 w 且高度為 h .

void QWidget:: setFixedWidth ( int w )

把 Widget 的最小和最大寬度設為 w 不改變高度。為方便起見提供。

另請參閱 sizeHint (), minimumSize (), maximumSize (),和 setFixedSize ().

void QWidget:: setFocus ( Qt::FocusReason reason )

把鍵盤輸入聚焦賦予此 Widget (或其聚焦代理),若此 Widget (或其父級 Widget) 是 活動窗口 reason 自變量會被傳入由此函數發送的任何聚焦事件,用於給齣為什麼導緻 Widget 獲得聚焦的解釋。若窗口不活動,Widget 將獲得焦點當窗口變為活動時。

首先,把聚焦即將更改事件發送給聚焦 Widget (若有的話),告訴它即將失去聚焦。然後聚焦改變,把聚焦齣事件發送給先前的聚焦項,並把聚焦入事件發送給新項 (告訴它剛剛收到聚焦;什麼都不發生,若聚焦入和聚焦齣 Widget 相同)。

注意: 在嵌入式平颱,setFocus() 不會導緻通過輸入法打開輸入麵闆。若想要這發生,必須發送 QEvent::RequestSoftwareInputPanel 事件給 Widget 自身。

setFocus() 把聚焦賦予 Widget 不管其聚焦策略,但不清零任何鍵盤抓取 (見 grabKeyboard ()).

要意識到,若被隱藏,Widget 就不會接受聚焦直到被展示。

警告: 若在可以調用自身的函數中調用 setFocus() 從 focusOutEvent () 或 focusInEvent (),可能獲得無限遞歸。

另請參閱 hasFocus (), clearFocus (), focusInEvent (), focusOutEvent (), setFocusPolicy (), focusWidget (), QApplication::focusWidget (), grabKeyboard (), grabMouse (), Widget 鍵盤聚焦 ,和 QEvent::RequestSoftwareInputPanel .

void QWidget:: setFocusProxy ( QWidget * w )

把 Widget 的聚焦代理設為小部件 w 。若 w is nullptr ,函數將此 Widget 重置為沒有聚焦代理。

某些 Widget 可以擁有聚焦,但會創建子級 Widget,譬如 QLineEdit ,以實際處理聚焦。在這種情況下,Widget 可以將行編輯設為其聚焦代理。

setFocusProxy() 設置實際獲得聚焦的小部件,當此 Widget 獲得聚焦時。若存在聚焦代理, setFocus () 和 hasFocus () 將運轉於聚焦代理。若此 Widget 是聚焦小部件,那麼 setFocusProxy() 將把聚焦移到新的聚焦代理。

另請參閱 focusProxy ().

void QWidget:: setForegroundRole ( QPalette::ColorRole role )

把 Widget 的前景角色設為 role .

前景角色定義顔色來自 Widget 的 palette 用於繪製前景。

role is QPalette::NoRole ,Widget 使用對比背景角色的前景角色。

注意,樣式能從調色闆自由選取任何顔色。可以修改調色闆或設置樣式錶,若采用 setForegroundRole() 達不到想要的結果。

另請參閱 foregroundRole () 和 backgroundRole ().

void QWidget:: setGeometry ( int x , int y , int w , int h )

這是重載函數。

這相當於 setGeometry( QRect ( x , y , w , h )).

注意: setter 函數對於特性 geometry .

void QWidget:: setGraphicsEffect ( QGraphicsEffect * effect )

setGraphicsEffect 函數用於設置 Widget 的圖形效果。

設置 effect 作為 Widget 的效果。若此 Widget 有安裝效果, QWidget 將刪除現有效果先於安裝新 effect .

effect 是在不同 Widget 安裝效果,setGraphicsEffect() 將從 Widget 移除效果並將它安裝在此小部件中。

QWidget 擁有所有權對於 effect .

注意: 此函數將效果應用到自身及其所有子級。

注意: 圖形效果不支持基於 OpenGL 的 Widget,譬如 QGLWidget, QOpenGLWidget and QQuickWidget .

該函數在 Qt 4.6 引入。

另請參閱 graphicsEffect ().

void QWidget:: setLayout ( QLayout * layout )

將此 Widget 的布局管理器設為 layout .

若此 Widget 中已安裝瞭布局管理器, QWidget 是不會允許安裝另一個的。必須首先刪除現有的布局管理器 (返迴通過 layout ()),在可以采用新的布局調用 setLayout() 之前。

layout 是不同 Widget 的布局管理器,setLayout() 將重設父級布局,並使其成為此 Widget 的布局管理器。

範例:

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(formWidget);
    setLayout(layout);
					

調用此函數的備選方案,是把此 Widget 傳遞給布局構造函數。

The QWidget 將擁有所有權對於 layout .

另請參閱 layout () 和 布局管理 .

void QWidget:: setMask (const QBitmap & bitmap )

促使 Widget 像素僅與 bitmap 具有相應 1 位纔可見。若區域包括像素超齣 rect 對於 Widget,在該區域中的窗口係統控件可能可見,也可能不可見,從屬平颱。

注意:此效果可能很慢,若區域尤其復雜。

以下代碼展示如何使用具有 Alpha 通道的圖像,去生成用於 Widget 的遮罩:

    QLabel topLevelLabel;
    QPixmap pixmap(":/images/tux.png");
    topLevelLabel.setPixmap(pixmap);
    topLevelLabel.setMask(pixmap.mask());
					

由此代碼展示的標簽使用它所包含的圖像進行遮罩,讓外觀是不規則形狀的圖像被直接繪製到屏幕上。

被遮罩 Widget 僅在其可見部分,接收鼠標事件。

另請參閱 mask (), clearMask (), windowOpacity (),和 異形時鍾範例 .

void QWidget:: setMask (const QRegion & region )

這是重載函數。

導緻 Widget 僅部分重疊 region 纔可見。若區域包括像素超齣 rect 對於 Widget,在該區域中的窗口係統控件可能可見,也可能不可見,從屬平颱。

注意:此效果可能很慢,若區域尤其復雜。

另請參閱 windowOpacity .

void QWidget:: setMaximumSize ( int maxw , int maxh )

這是重載函數。

此函數相當於 setMaximumSize( QSize ( maxw , maxh ))。設置最大寬度到 maxw 和最大高度到 maxh .

注意: setter 函數對於特性 maximumSize .

void QWidget:: setMinimumSize ( int minw , int minh )

這是重載函數。

此函數相當於 setMinimumSize( QSize (minw, minh))。設置最小寬度到 minw 和最小高度到 minh .

注意: setter 函數對於特性 minimumSize .

void QWidget:: setParent ( QWidget * parent )

將 Widget 父級設為 parent ,並重置窗口標誌。把 Widget 移到其新父級的 (0, 0) 位置。

若新的父級 Widget 在不同窗口中,重設父級的小部件及其子級會被追加到末尾對於 Tab 鏈 的新父級 Widget,以與之前相同的內部次序。若被移動 Widget 之一擁有鍵盤聚焦,則 setParent() 會調用 clearFocus () 為該 Widget。

若新父級 Widget 和舊父級在同一窗口中,設置父級不改變選項卡次序 (或鍵盤聚焦)。

若新父級 Widget 是舊父級小部件,此函數什麼都不做。

注意: 作為改變其父級的一部分 Widget 變為不可見,即使它先前可見。必須調用 show () 以使 Widget 再次可見。

警告: 您不太可能需要此函數。若有動態改變其內容的 Widget,容易得多的是使用 QStackedWidget .

另請參閱 setWindowFlags ().

void QWidget:: setParent ( QWidget * parent , Qt::WindowFlags f )

這是重載函數。

此函數還接受 Widget 標誌, f 作為自變量。

void QWidget:: setShortcutAutoRepeat ( int id , bool enable = true)

enable 為 true,快捷方式的自動重復采用給定 id 被啓用;否則被禁用。

該函數在 Qt 4.2 引入。

另請參閱 grabShortcut () 和 releaseShortcut ().

void QWidget:: setShortcutEnabled ( int id , bool enable = true)

enable 為 True,快捷方式采用給定 id 被啓用;否則快捷方式被禁用。

警告: 應該通常不需要使用此函數,因為 Qt 的快捷方式係統會自動啓用/禁用快捷方式當 Widget 變為隱藏/可見並獲得 (或失去) 聚焦時。最好使用 QAction or QShortcut 處理快捷方式,因為它們比此低級函數更易於使用。

另請參閱 grabShortcut () 和 releaseShortcut ().

void QWidget:: setSizeIncrement ( int w , int h )

這是重載函數。

將 x (寬度) 尺寸增量設為 w 和 y (高度) 尺寸增量到 h .

注意: setter 函數對於特性 sizeIncrement .

void QWidget:: setSizePolicy ( QSizePolicy::Policy horizontal , QSizePolicy::Policy vertical )

這是重載函數。

將 Widget 的大小策略設為 horizontal and vertical ,采用標準拉伸和高度不為寬度。

注意: setter 函數對於特性 sizePolicy .

另請參閱 QSizePolicy::QSizePolicy ().

void QWidget:: setStyle ( QStyle * style )

將小部件 GUI 樣式設為 style 。樣式對象的所有權不轉移。

若未設置樣式,Widget 使用應用程序的樣式, QApplication::style () 代替。

設置 Widget 的樣式不影響現有 (或未來) 子級小部件。

警告: 此函數對於想要展示 Qt 的樣式化能力的演示目的特彆有用。真實應用程序應避免並使用一種一緻的 GUI 樣式代替。

警告: Qt 樣式錶目前不支持自定義 QStyle 子類。計劃在某些未來發行中解決此問題。

另請參閱 style (), QStyle , QApplication::style (),和 QApplication::setStyle ().

[static] void QWidget:: setTabOrder ( QWidget * first , QWidget * second )

放置 second 小部件後於 first 小部件按聚焦次序。

它有效移除 second 小部件從其聚焦鏈並將它插入後於 first 小部件。

注意,由於選項卡次序對於 second 小部件已改變,應排序鏈像這樣:

setTabOrder(a, b); // a to b
setTabOrder(b, c); // a to b to c
setTabOrder(c, d); // a to b to c to d
					

not 像這樣:

// WRONG
setTabOrder(c, d); // c to d
setTabOrder(a, b); // a to b AND c to d
setTabOrder(b, c); // a to b to c, but not c to d
					

first or second 擁有聚焦代理,setTabOrder() 會正確代入代理。

注意: 從 Qt 5.10 起:會將擁有子級作為聚焦代理的 Widget,理解成復閤小部件。當在 1 個或 2 個復閤小部件之間設置選項卡次序時,將保留每個復閤小部件內的本地選項卡次序。這意味著若 2 個 Widget 都是復閤小部件,産生的選項卡次序將從最後一個子級 first ,到第一子級 second .

另請參閱 setFocusPolicy (), setFocusProxy (),和 Widget 鍵盤聚焦 .

void QWidget:: setWindowFlag ( Qt::WindowType flag , bool on = true)

設置窗口標誌 flag 在此 Widget 若 on 為 true;否則清零標誌。

該函數在 Qt 5.9 引入。

另請參閱 setWindowFlags (), windowFlags (),和 windowType ().

void QWidget:: setWindowRole (const QString & role )

把窗口角色設為 role 。這僅對 X11 中的窗口有意義。

另請參閱 windowRole ().

void QWidget:: setWindowState ( Qt::WindowStates windowState )

把窗口狀態設為 windowState 。窗口狀態是 OR (或) 組閤的 Qt::WindowState : Qt::WindowMinimized , Qt::WindowMaximized , Qt::WindowFullScreen ,和 Qt::WindowActive .

若窗口不可見 (即 isVisible () 返迴 false ),窗口狀態將生效當 show () 被調用。對於可見窗口,改變是立即的。例如,要在全屏和正常模式之間切換,使用以下代碼:

w->setWindowState(w->windowState() ^ Qt::WindowFullScreen);
					

為還原和激活最小化窗口 (當保留其最大化和/或全屏狀態時),使用以下:

w->setWindowState((w->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
					

調用此函數將隱藏 Widget。必須調用 show () 以使 Widget 再次可見。

注意: 在某些窗口係統中 Qt::WindowActive 不是立即的,且在某些情況下可能被忽略。

當窗口狀態改變時,Widget 接收 changeEvent () 的類型 QEvent::WindowStateChange .

另請參閱 Qt::WindowState and windowState ().

void QWidget:: setupUi ( QWidget * widget )

把用戶界麵設為指定 widget .

注意: 此函數可用於派生自用戶界麵描述的 Widget,創建使用 uic .

另請參閱 在 C++ 應用程序使用 Designer UI 文件 .

[virtual protected] void QWidget:: showEvent ( QShowEvent * event )

此事件處理程序可以在子類中重實現,收到的 Widget 展示事件被傳入 event 參數。

非自發展示事件會被立即發送給 Widget,在展示它們前。窗口的自發展示事件是之後交付的。

注意:Widget 接收自發展示和隱藏事件,當通過窗口係統改變其映射狀態時 (如:自發隱藏事件當用戶最小化窗口時,和自發展示事件當再次還原窗口時)。在收到自發隱藏事件後仍認為 Widget 可見,當意識到 isVisible ().

另請參閱 visible , event (),和 QShowEvent .

void QWidget:: stackUnder ( QWidget * w )

下置小部件 w 在父級 Widget 堆棧。

要使這工作,Widget 本身和 w 必須同級。

另請參閱 raise () 和 lower ().

QStyle *QWidget:: style () const

另請參閱 QWidget::setStyle (), QApplication::setStyle (),和 QApplication::style ().

[virtual protected] void QWidget:: tabletEvent ( QTabletEvent * event )

此事件處理程序用於事件 event ,可在子類中重實現以接收 Widget 數位闆事件。

若重實現此處理程序,非常重要的是 ignore() 事件若不處理它,以便 Widget 父級可以解釋它。

默認實現忽略事件。

若數位闆跟蹤被切換為關,數位闆移動事件纔發生若手寫筆接觸數位闆,或至少按下一手寫筆按鈕,當移動手寫筆時。若數位闆跟蹤被切換為開,數位闆移動事件發生,即使手寫筆懸停在數位闆附近,沒有按下按鈕。

另請參閱 QEvent::ignore (), QEvent::accept (), event (), setTabletTracking (),和 QTabletEvent .

bool QWidget:: testAttribute ( Qt::WidgetAttribute attribute ) const

返迴 true 若屬性 attribute 在此 Widget 有設置;否則返迴 false .

另請參閱 setAttribute ().

bool QWidget:: underMouse () const

返迴 true 若 Widget 在鼠標光標下方;否則返迴 false .

此值不會正確更新,在拖放操作期間。

另請參閱 enterEvent () 和 leaveEvent ().

void QWidget:: ungrabGesture ( Qt::GestureType gesture )

取消 Widget 訂閱從給定 gesture type

該函數在 Qt 4.6 引入。

另請參閱 grabGesture () 和 QGestureEvent .

void QWidget:: update ( int x , int y , int w , int h )

這是重載函數。

此版本更新矩形 ( x , y , w , h ) 在 Widget 內。

void QWidget:: update (const QRect & rect )

這是重載函數。

此版本更新矩形 rect 在 Widget 內。

void QWidget:: update (const QRegion & rgn )

這是重載函數。

此版本重新描繪區域 rgn 在 Widget 內。

void QWidget:: updateGeometry ()

通知布局係統此 Widget 已改變,且可能需要更改幾何體。

調用此函數,若 sizeHint () 或 sizePolicy () 已改變。

對於明確隱藏 Widget,updateGeometry() 是空操作。會盡快通知布局係統,Widget 一展示。

QRegion QWidget:: visibleRegion () const

返迴在哪裏可以齣現,描繪事件的未遮蓋片區。

對於可見 Widget,這是由其它 Widget 未覆蓋的近似區域;否則,這是空片區。

The repaint () 函數會調用此函數若有必要,因此一般不需要調用它。

[virtual protected] void QWidget:: wheelEvent ( QWheelEvent * event )

此事件處理程序用於事件 event ,可以在子類中被重實現以接收 Widget 滾輪事件。

若重實現此處理程序,非常重要的是 ignore() 事件若不處理它,以便 Widget 父級可以解釋它。

默認實現忽略事件。

另請參閱 QEvent::ignore (), QEvent::accept (), event (),和 QWheelEvent .

WId QWidget:: winId () const

返迴 Widget 的窗口係統標識符。

原則上是可移植的,但若使用它,可能會做一些不可移植的事情。小心。

若 Widget 非本機 (外來) 且它有援引 winId(),則該 Widget 會提供本機句柄。

此值可能在運行時改變。事件若具有類型 QEvent::WinIdChange 會被發送給 Widget 在窗口係統標識符改變後。

另請參閱 find ().

QWidget *QWidget:: window () const

返迴用於此 Widget 的窗口,即具有 (或可能具有) 窗口係統框架的下一祖先 Widget。

若 Widget 是窗口,Widget 本身被返迴。

典型用法是更改窗口標題:

aWidget->window()->setWindowTitle("New Window Title");
					

另請參閱 isWindow ().

QWindow *QWidget:: windowHandle () const

若這是本機 Widget,返迴關聯 QWindow 。否則返迴 null。

本機 Widget 包括頂層小部件、QGLWidget 及子級小部件,在其中 winId () 被調用。

該函數在 Qt 5.0 引入。

另請參閱 winId () 和 screen ().

QString QWidget:: windowRole () const

返迴窗口的角色 (或空字符串)。

另請參閱 setWindowRole (), windowIcon ,和 windowTitle .

Qt::WindowStates QWidget:: windowState () const

返迴當前窗口狀態。窗口狀態是 OR (或) 組閤的 Qt::WindowState : Qt::WindowMinimized , Qt::WindowMaximized , Qt::WindowFullScreen ,和 Qt::WindowActive .

另請參閱 Qt::WindowState and setWindowState ().

Qt::WindowType QWidget:: windowType () const

返迴此 Widget 的窗口類型。這等同於 windowFlags () & Qt::WindowType_Mask .

另請參閱 windowFlags .

宏文檔編製

QWIDGETSIZE_MAX

定義最大尺寸為 QWidget 對象。

Widget 的最大允許尺寸為 QSize (QWIDGETSIZE_MAX, QWIDGETSIZE_MAX),即 QSize (16777215, 16777215)。

另請參閱 QWidget::setMaximumSize ().