1. 程式人生 > >qt窗體close和hide的區別

qt窗體close和hide的區別



bool QWidget::close() [slot]
Closes this widget. Returns true if the widget was closed; otherwise returns false.

First it sends the widget a QCloseEvent. The widget is hidden if it accepts the close event. If it ignores the event, nothing happens. The default implementation of QWidget::closeEvent() accepts the close event.

If the widget has the Qt::WA_DeleteOnClose flag, the widget is also deleted. A close events is delivered to the widget no matter if the widget is visible or not.

The QApplication::lastWindowClosed() signal is emitted when the last visible primary window (i.e. window with no parent) with the Qt::WA_QuitOnClose attribute set is closed. By default this attribute is set for all widgets except transient windows such as splash screens, tool windows, and popup menus.

上面是qt assistant關於QWidget類的close槽的說明。

關閉widget。如果widget被關閉返回true,否則返回false。
它首先向widget傳送QCloseEvent事件。如果窗體接收到close事件就隱藏。如果它忽略了該事件,就什麼都不會發生。QWidget::closeEvent()的預設實現接收close事件。
如果widget有Qt::WA_DeleteOnClose標誌,則widget也會被刪除。無論widget是否可見close事件都會投遞到widget。
當最後一個帶有Qt::WA_QuitOnClose屬性的可見主視窗被關閉時,會發送QApplication::lastWindowClosed()訊號。該屬性預設所有widget都有,除了splash screens, tool windows, and popup menus這些臨時窗體。

void QWidget::hide() [slot]
Hides the widget. This function is equivalent to setVisible(false).
隱藏widget。該函式等同於 setVisible(false)。

那麼close和hide區別就很明顯了:
hide只是隱藏窗體。不會發送任何訊號。
close一般也是隱藏視窗。但是它會發送QCloseEvent事件。你可以重寫void QWidget::closeEvent(QCloseEvent * event) [virtual protected],可以隱藏widget或者不隱藏。Qt::WA_DeleteOnClose標誌還會影響窗體在記憶體中的狀態,如果設定了該標誌,窗體就會被刪除,而hide則不會。最後主窗體的close會導致整個程式的退出,而hide明顯不會。

PS:再對一個窗體呼叫close函式後,如果再呼叫show(),這個窗體又會被顯示出來。

相關推薦

qt窗體closehide區別

 bool QWidget::close() [slot] Closes this widget. Returns true if the widget was closed; otherwise returns false. First it sends the

easyUI dialog的closedestroy區別

之前在用easyUI的時候遇到一個問題,一直困擾著我。 問題: 使用dialog來實現儲存和編輯框,使用dialog.(“close”)來關閉dialog框,這個時候如果有兩個頁面的儲存頁面的表單的欄位相同時,這兩個表單的東西就會混亂。要不就是儲存時打不開,要不就是編輯頁面開啟資料初始

socket中close()shutdown()區別

基本TCP程式socket函式 併發伺服器 Unix中編寫併發伺服器最簡單的辦法是fork一個子程序來服務每個客戶。 當一個連線建立時,accept返回,伺服器接著呼叫fork,然後由子程序服務客戶(通過已連線的套接字connfd),父程序則等待另一個

C#中closedispose區別

Close是停業整頓 Dispose是炸燬 停業了,可以通過公關,再重開。物還是原來的物 炸燬了,想再開張,就只有重頭建起 C#中解構函式是有垃圾蒐集器來呼叫的,當所引用的堆上的資料當無效時,會隱式呼叫。一般表現為當引用變數超出其作用域時就會呼叫。 Close函式和Dis

HTTP ------ connection 為 close keep-alive 的區別

圖片 tcp連接 三次握手 字段 tcp 其它 時代 http 網頁 keep-alive和close這個要從TCP握手講起HTTP請求是基於TCP連接的,TCP的請求會包含(三次握手,中間請求,四次揮手)在HTTP/1.0時代,一個HTTP請求就要三次握手和四次揮手,當一

說話人識別開集open-set閉集close-set的區別

先引用知乎上 @LEON晉 大神解釋的說話人識別對說話人準確率判斷的兩個評分標準: 在一批本該全部正確(TRUE)的列表中出現幾個沒識別出正確的語音,這個就是錯誤拒識FR(False Rejection),是Miss的;在一批本該全部錯誤(Flase)的列表中出現了幾個沒識別出錯誤的語音

Qt中deletedeleteLater()的使用區別事例之QMenu關閉父介面

delete是C++的關鍵字識別符號,而deleteLater是QT中特有的,繼承QObject的類都擁有該方法。兩者主要區別是delete會馬上銷燬目標物件的,而並沒有將物件立即銷燬,而是向主訊息迴圈傳送了一個event,下一次主訊息迴圈收到這個event之後才會銷燬物件。

Java中IO流-18-flushclose方法的區別

    本篇來學習一個小的知識點,flush方法和close方法的區別。前面我們介紹了和使用了close方法,知道是用來關閉流的操作,但是並沒有介紹flush方法,字面意思的重新整理的意思。下面我們來先看看一個例子,然後引出flush方法。 1.如果不關閉流執行程式碼 p

Qt窗體背景繪圖圖片顯示篇

今天重新研究Qt窗體繪圖和圖片顯示 (1)窗體的背景上繪製線段和區域 (2)窗體背景顯示圖片以及圖片縮放 (3)無邊框窗體顯示以及無邊框窗體的移動 (4)自定義widget形狀 (1) 在窗體上執行繪製線段和區域等操作 圖1 有時候需要在窗體的背景上繪製一些直線或者對

C# 中隱藏一個窗體後開啟另一個窗體,使用Show()Hide()方法

新建兩個窗體Form1 和Form2 ; Form1 中的按鈕 的單擊事件方法裡面的程式碼; Form2 fm2= new Form2(this); fm2.Show(); this.Hide(); Form2 窗體裡面的程式碼; Form1 fm1 = new Fo

Connection: closeConnection: keep-alive有什麼區別

對於HTTP/1.0來說可以充分利用瀏覽器預設最大併發連線數比HTTP/1.1多的好 處,實現不增加新域名的開銷而更高的並行下載,減少域名解釋的開銷(注:IE 6,7在HTTP/1.0中預設最大併發連線數為4,在HTTP/1.1中預設最大併發連線數為2,IE8都為6,Firefox2在HTTP/1.0中 預

Qt中QEvent訊號槽的區別

4.Qt::AutoConnectionIf the signal is emitted from the thread in which the receiving object lives, the slot is invoked directly, as with Qt::DirectConnectio

Qt WidgetDialog區別使用,QWidget一閃而過

在開發過程發現子視窗的解構函式沒有執行,後來查詢發現,在建立物件的時候沒有傳遞this指標 例如Model *model = new Model();和Model *model =  new Mode

selenium中的quitclose方法的區別

我用selenium webdriver(以後簡稱SW) 驅動谷歌瀏覽器進行網頁資料的獲取。之所以用谷歌,主要是由於它是輕量級的,速度快。 做資料獲取,SW 是不錯的選擇。有人總是說,SW速度慢,比不上httpclient或者HtmlUnit,它們直接操作底層資料來的更加

socket連結的關閉closeshutdown的區別

TCP主動關閉連線 appl: close(), --> FIN FIN_WAIT_1 //主動關閉socket方,呼叫close關閉socket,發FIN <-- A

fragment中的replacehide與shou方法的區別

FragmentManager fm=getFragmentManager(); // (getSupportFragmentManager()方法是使用v4包的fragment使用) FragmentTransaction ft=fm.beginTransa

fclose(stdout)close(1)的區別

#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #i

(轉)Android 開發 對話方塊Dialog dismisshide方法的區別

原地址:https://www.pocketdigi.com/20120815/900.html dismiss和hide方法都可以隱藏對話方塊,在需要的時候也可以用show方法呼叫顯示。但是,這兩者是有區別的。 dismiss方法會釋放對話方塊所佔的資源,而hide

GETPOST區別總結

get 、post 、區別一、GET和POST區別的普遍看法:HTTP 定義了與服務器交互的不同方法,最常用的有4種,Get、Post、Put、Delete,如果我換一下順序就好記了,Put(增),Delete(刪),Post(改),Get(查),即增刪改查,下面簡單敘述一下:1)Get, 它用於獲取信息,註

JS中const、varlet區別

方法 pre 命令 con 使用 它的 comm 作用 影響 在JavaScript中有三種聲明變量的方式:var、let、const。 1.const 聲明創建一個只讀的常量。這不意味著常量指向的值不可變,而是變量標識符的值只能賦值一次,必須初始化。 const b