日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QWidget

發布時間:2025/3/15 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QWidget 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QWidget

? ?QWidget是容器組件,繼承自QObject類和QPaintDevice類。能夠繪制自己和處理用戶輸入,是QT中所有窗口組件類的父類,是所有窗口組件的抽象,每個窗口組件都是一個QWidget,QWidget類對象常用作父組件或頂級組件使用

QWidget常用方法:

構造函數:

?

  • ? QWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
  • ?parent 指向父窗口,如果這個參數為 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); // 設置窗口狀態
    Qt::WindowStates 類型有以下幾個取值。取值可以用 “按位或” 的方式組合起來使用。1)Qt::WindowNoState:無標志,正常狀態。2)Qt::WindowMinimized:最小化狀態。3)Qt::WindowMaxmized:最大化狀態。4)Qt::WindowFullScreen:全屏狀態。5)Qt::WindowActive:激活狀態。 需要注意的是,調用 setWindowState 函數將使窗口變為隱藏狀態。

    ?

    字體

    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); //鍵盤離開事件
    QKeyEvent: 成員函數可以獲得關于按鍵的一些信息int key() const; // 得到鍵的枚舉值
    • 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);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 鼠標滾輪移動
    QMouseEvent 事件的成員函數可獲得關于鼠標的信息const QPoint &pos() const; // 得到鼠標坐標(相對于接收事件的窗口) int x() const; // 得到鼠標橫坐標(相對于接收事件的窗口) int y() const; // 得到鼠標縱坐標(相對于接收事件的窗口) const QPoint &globalPos() const; // 得到鼠標坐標(全局坐標) int globalX() const; // 得到鼠標橫坐標 (全局坐標) int globalY() const; // 得到鼠標縱坐標 (全局坐標) Qt::MouseButton button() const; // 得到引起事件的鼠標鍵 Qt::MouseButtons buttons() const; //得到事件發生時的鼠標鍵狀態 其中,Qt::MouseButton 是一個枚舉類型,有以下常用取值。1)Qt::NoButton:無鍵。2)Qt::LeftButton:左鍵。3)Qt::RightButton:右鍵。4)Qt::MidButton:中鍵。對于鼠標移動事件 QMouseEvent 和 button 函數總是返回 Qt::NoButton,buttons 函數返回值則是 Qt::MouseButton 類型的 “按位或” 組合,它能反映事件發生時鼠標鍵的按下狀態。QWheelEvent 類代表滾輪事件,它有一套與 QMountEvent 類幾乎相同的成員函數,但少一個 button 函數,多以下兩個函數:int delta() const; // 獲得滾輪轉動的角度 Qt::Orientation orientationI() const; // 獲得滾輪轉動的方向 其中 Qt::Orientation 是一個枚舉類型,它有以下取值。1)Qt::Horizontal:橫向。2)Qt::Vertical:縱向。
    • virtual void focusInEvent(QFocusEvent *event); // 獲得焦點

    • virtual void focusOutEvent(QFocusEvent *event); // 時取焦點

    ?

    新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

    總結

    以上是生活随笔為你收集整理的QWidget的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。