QWidget
QWidget
? ?QWidget是容器組件,繼承自QObject類和QPaintDevice類。能夠繪制自己和處理用戶輸入,是QT中所有窗口組件類的父類,是所有窗口組件的抽象,每個窗口組件都是一個QWidget,QWidget類對象常用作父組件或頂級組件使用
QWidget常用方法:
構造函數:
?
- ? QWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
參數 f 是構造窗口的標志,主要用于控制窗口的類型和外觀等
依賴關系
- ??QWidget *window() const; ? ? ?// 所得所在的獨立窗口 ,當然,如果窗口本身就是獨立窗口,那么得到的就是自己。
- ??QWidget *parentWidget() const; ? ?// 得到父窗口
窗口標題
- ? QString windowTitle() const; // 獲得窗口標題
- ? void setWindowTitle(const QString &text); // 設置窗口標題為 text
幾何參數
幾何參數指的是窗口的大小和位置。一個窗口有兩套幾何參數,一套是窗口外邊框所占的矩形區域,另一套是窗口客戶區所占的矩形區域。所謂窗口客戶區就是窗口中去除邊框和標題欄用來顯示內容的區域。
客戶區幾何參數變化之后,外邊框的幾何參數也會隨之變化。設置幾何參數可能會使窗口的位置及大小發生變化,這時會發送窗口移動事件 QMoveEvent,如果大小有變化,還會發送窗口改變大小事件 QResizeEvent,?這里的坐標都是相對于父窗口的,因此移動一個窗口并不導致它的所有部件都接收到移動事件。
?
- const QRect &geometry() const; ? ? ? ? ? ? ? ? // 獲取客戶區幾何參數 ?
- void setGeometry(int x, int y, int w, int h); ? ?// 設置客戶取幾何參數 ?
- void setGeometry(const QRect &rect); ? ? ? ? // 設置客戶區幾何參數 ?
- QRect frameGeometry() const; ? ? ? ? ? ? ? ? ?// 獲取外邊框幾何參數
- QSize frameSize() const; // 窗口大小 (外邊框幾何參數)
- QPoint pos() const; ? ? // 獲得窗口左上角的坐標(外邊框幾何參數) ?
- QSize size() const; ? ? ?// 窗口大小 (客戶區幾何參數) ?
- int x() const; ? ? ? ? ? ? ? ? ?// 窗口左上角橫坐標 (外邊框幾何參數) ?
- int y() const; ? ? ? ? ? ? ? ? ?// 窗口左上角縱坐標 (外邊框幾何參數) ?
- int height() const; ? ? ? ?// 窗口高度 (客戶區幾何參數) ?
- int width() const; ? ? ? ? ?// 窗口寬度 (客戶區幾何參數)
- void move(int x, int y); ? ?// 將窗口左上角移動到坐標(x, ?y)處; ?
- void move(const QPoint &pos); ? ? // 將窗口左上角移動到 pos 處; ?
- void resize(int w, int h); ? ? // 將窗口的寬度改為 w, 高度改為 h ?
- void resize(const QSize &size); ? ? // 將窗口的大小改為 ?size
- bool isMinimized() const; ? ? // 判斷窗口是否為最小化 ?
- bool isMaximized() const; ? ?// 判斷窗口是否為最大化 ?
- bool isFullScreen() const; ? // 判斷窗口是否為全屏 ?
- void showMinimized(); ? ? ? ? // 以最小化方式顯示窗口,這是一個槽 ?
- void showMaximized(); ? ? ? ?// 以最大化方式顯示窗口,這是一個槽 ?
- void showFullScreen(); ? ? ? ?// 以全屏方式顯示窗口,這是一個槽 ?
- void showNormal(); ? ? ? ? ? ? ?// 以正常方式顯示窗口,這是一個槽
- Qt::WindowStates windowState() const; // 獲取窗口狀態
- void setWindowState(Qt::WindowStates windowState); // 設置窗口狀態
?
字體
font 屬性表示所用的字體,?如果沒有為窗口設置字體,則窗口自動使用父窗口的字體,頂級窗口則使用應用程序的默認字體。
-
const QFont &font() const; // 獲得字體
-
void setFont(const QFont &); // 設置字體
布局
layout 代表窗口的頂級布局
-
QLayout *layout() const; // 獲得頂級布局
-
void setLayout(QLayout *layout); // 設置頂級布局
窗口可見性
? ? 可見性指的是窗口是否顯示在屏幕上的屬性。被其他窗口暫時遮擋住的窗口也屬于可見的。可見性由窗口的 visible 屬性表示
- bool isVisible() const; ? ?// 判斷窗口是否可見 ?
- bool isHidden() const; ? // 判斷窗口是否隱藏 ?
- virtual void setVisible(bool visible); ? // 設置窗口是否隱藏? ?這是一個槽
- void setHidden(bool hidden); ? ?// 等價于 setvisible(!hidedn);? 這是一個槽
- void show(); // 顯示窗口,等價于 setVisible(true);?這是一個槽
- void hide(); // 隱藏窗口,等價于 setHidden(true);?這是一個槽
當窗口顯示時,將發送 QShowEvent 事件;當窗口隱藏時,將發送 QHideEvent 事件。事件的處理函數分別是 showEvent 和 hideEvent。
激活狀態
? ? 當有多個獨立窗口同時存在時,只有一個窗口能夠處于激活狀態。系統產生的鍵盤、鼠標等輸入事件將被發送給處于激活狀態的窗口。一般來說,這樣的窗口會被提升到堆疊層次的最上面,除非其他窗口有總在最上面的屬性
-
bool isActiveWindow() const; // 判斷窗口所在的獨立窗口是否激活
-
void activateWindow(); // 設置窗口所在的獨立窗口為激活狀態
?
注意:這里操作的其實不是窗口本身,而是窗口所在的獨立窗口,因為窗口部件時沒有激活狀態的概念的。
焦點
? ? 焦點用來控制同一個獨立窗口內哪一個部件可以接受鍵盤事件,同一時刻只能有一個部件獲得焦點。窗口部件得到焦點以后,還需要它所在的獨立窗口處于激活狀態才能得到鍵盤事件。
? ? 一個窗口獲得焦點,同時意味著另一個窗口失去焦點。當窗口獲得或失去焦點時,將發送 QFocusEvent 事件,它有兩個處理函數:forceInEvent 和 focusOutEvent,分別對應獲得焦點和失去焦點。
? ? ? ? 值得一提的是 editFocus 屬性,這是一個專門用于嵌入式系統的屬性。因為嵌入式系統通常鍵盤較小,沒有專門用于切換焦點的 Tab 鍵,所以上下方向鍵被用來切換焦點。如果一個窗口部件設置 editFocus 屬性為 true,則上下方向鍵就不再用于切換焦點,而是發送給這個窗口。
- bool hasFocus() const; ? ? ? ? ? ? ? ? ? ? // 判斷窗口是否獲得焦點 ?
- void setFocus(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 使窗口獲得焦點,這是一個槽 ?
- void clearFocus(); ? ? ? ? ? ? ? ? ? ? ? ? ?// 使窗口失去焦點 ?
- QWidget *focusWidget() const; ? ? ? ?// 得到窗口內獲得焦點的子窗口
- bool hasEditfocus() const; // 判斷窗口是否有 editFocus 屬性
- void QWidget::setEditFocus(bool enable); // 設置窗口的 editFocus 屬性
信號
-
void destoryed(QObject *obj = 0); //這是一個從 QOjbect 類繼承過來的信號。QObject 對象析構時,先發射這個信號,然后才析構它的所有子對象。
槽
- bool close();? //當這個槽被調用時,首先向這個窗口發送一個關閉事件,如果事件被接受,則窗口隱藏,如果被拒絕,則什么也不做。如果窗口設置了 Qt::WA_QuitOnClose 屬性,則窗口對象會被析構,大多數類型的窗口都默認設置了這個屬性。這個槽的返回值表示關閉事件是否被接受,也就是窗口是否真的被關閉了。?
- void lower(); ? ? ? ? // 降低窗口到最下面 ?
- void raise(); ? ? ? ?// 提升窗口到最上面
捕獲鍵盤和鼠標事件
? ? ? 捕獲了鍵盤鼠標事件的窗口將得到所有鍵盤鼠標事件,而其他窗口將完全得到不到鍵盤鼠標事件,直到捕獲了鍵盤鼠標事件的窗口釋放鍵盤鼠標事件。 窗口部件即使獲得焦點,也不一定能獲得按鍵事件,因為其他窗口可能會捕獲鍵盤事件。
? ? ? 鍵盤事件和鼠標事件的捕獲是相互獨立的。這里要注意兩點:一是如果有另外一個窗口進行了捕獲操作,則當前處于捕獲狀態的窗口將失去對事件的捕獲;二是只有可見的窗口才能進行輸入事件捕獲。
-
void grabKeyboard(); // 捕獲鍵盤事件
-
void releaseKeyboard(); // 釋放鍵盤事件
-
void grabMouse(); // 捕獲鼠標事件
-
void releaseMouse(); // 釋放鼠標事件
-
QWidget *keyboardGrabber(); // 得到正在捕獲鍵盤事件的窗口
-
QWidget *mouseGrabber(); // 得到正在捕獲鼠標事件的窗口
事件
? ? 事件處理函數都沒有返回值,因此如果要接受或拒絕和一個事件要調用 QEvent 類的成員函數
-
event->accept(); // 接受事件
-
event->ignore(); // 拒絕事件
? 事件被拒絕后的結果視具體情況而定,比如關閉事件被拒絕后,窗口將不會被關閉,而鍵盤、鼠標等輸入事件被拒絕后會向上傳播到父窗口。
- virtual void closeEvent(QCloseEvent *event); ? ?// 關閉 ?
- virtual void showEvent(QShowEvent *event); ? ?// ?顯示 ?
- virtual void hideEvent(QHideEvent *event); ? ? ? ?// 隱藏 ?
- virtual void moveEvent(QMoveEvent *evnet); ? ? // 移動? ? QMoveEvent 類的成員函數可以獲得窗口的舊坐標和新坐標const QPoint &oldPos() const // 舊坐標const QPoint &newPos() const // 新坐標
?
- virtual void resizeEvent(QResizeEvent *event); ?// 改變大小?
- virtual void keyPressEvent(QKeyEvent *event); // 鍵按下
- virtual void keyReleaseEvent(QKeyEvent *event); // 鍵松開
- virtual void KeyReleaseEvent(QKeyEvent *event); //鍵盤離開事件
- virtual void mousePressEvent(QMouseEvent *event); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 鼠標鍵按下 ?
- virtual void mouseReleaseEvent(QMouseEvent *event); ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 鼠標鍵松開 ?
- virtual void mouseDoubleCllckEvent(QMouseEvent *event); ? ? ? ? ? ? ? ? ? ? ? // 鼠標鍵雙擊 ?
- virtual void mouseMoveEvent(QMouseEvent *event); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 鼠標移動? ?//TODO?QMouseEvent
- virtual void enterEvent(QEvent *event); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 鼠標進入窗口 ?
- virtual void leaveEvent(QEvent *event); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 鼠標離開窗口 ?
- virtual void wheelEvent(QWheelEvent *event);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 鼠標滾輪移動
-
virtual void focusInEvent(QFocusEvent *event); // 獲得焦點
-
virtual void focusOutEvent(QFocusEvent *event); // 時取焦點
?
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
- 上一篇: 命令行模式下的后向引用替换
- 下一篇: bash shell test条件测试[