1. 程式人生 > >十一、Qt新對話方塊建立與銷燬

十一、Qt新對話方塊建立與銷燬

模態對話方塊就是指在子對話方塊彈出時,焦點被強行集中於該子對話方塊,子對話方塊不關閉,使用者將無法操作其他的視窗。非模態相反,使用者仍然可以操作其他的視窗,包括該子對話方塊的父對話方塊。

如果從執行緒角度來講,模態對話方塊實際上是執行緒阻塞的,也就是子對話方塊是一個執行緒,但是在建立這個子執行緒之後,父視窗就阻塞了;模態對話方塊則不是阻塞型的執行緒模型,父子執行緒可以並行執行。

和所有流行的圖形類庫一樣,Qt也提供了建立模態和非模態對話方塊的機制。

在Qt中建立模態對話方塊,主要用到了QDialog的exec函式:

SonDialog dlg(this);

int res = dlg.exec();

if (res == QDialog::Accepted)

{

    QMessageBox::information(this, "INFORMATION", "You clicked OK button!");

}

if (res == QDialog::Rejected)

{

    QMessageBox::information(this, "INFORMATION", "You clicked CANCEL button!");

}

正如上面程式碼所顯示的,可以通過exec函式的返回值來判斷使用者點選了哪個按鈕使得模態對話方塊退出的,這可以使得我們能夠根據使用者的不同行為在推出退出模態對話方塊之後採取不同的處理方法。

在Qt中建立非模態對話方塊,主要用到了QDialog的show函式:

SonDialog *dlg;

dlg = new SonDialog(this);

dlg->show();

由上面程式碼,細心的讀者可能就會問了,既然new了,如果不delete,那麼記憶體不就存在了洩露的問題了嗎?確實如此!所以,我們希望該Qt視窗在退出時自動能夠delete掉自己,因此,我們在SonDialog的建構函式裡,新增這樣的一句程式碼:

setAttribute (Qt::WA_DeleteOnClose);

這樣,我們的SonDialog就能夠在它退出時自動的delete掉自己了,不會再造成記憶體洩漏問題。

PS: setAttribute()使用時存在一個問題,當要獲取對話方塊資料時,這時對話方塊其實已經關閉銷燬。而沒有加這句時,其實只是隱藏了,可以獲取資料。

最好 使用delete(dlg);

void QDialog::done ( int r ) [virtual slot]

Closes the dialog and sets its result code to r. If this dialog is shown with exec(), done() causes the local event loop to finish, and exec() to return r.

As with QWidget::close(), done() deletes the dialog if the Qt::WA_DeleteOnClose flag is set. If the dialog is the application's main widget, the application terminates. If the dialog is the last window closed, the QApplication::lastWindowClosed() signal is emitted.

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對話方塊建立銷燬

模態對話方塊就是指在子對話方塊彈出時,焦點被強行集中於該子對話方塊,子對話方塊不關閉,使用者將無法操作其他的視窗。非模態相反,使用者仍然可以操作其他的視窗,包括該子對話方塊的父對話方塊。 如果從執行緒角度來講,模態對話方塊實際上是執行緒阻塞的,也就是子對話方塊是一個執行

MFC之對話方塊建立銷燬總結

主void CMoshiwindowDlg::OnButton1()  {     // TODO: Add your control notification handler code here     CDialogproty dlg;      dlg.DoModa

Codis集群的搭建使用

linux一、簡介 Codis是一個分布式的Redis解決方案,對於上層的應用來說,連接Codis Proxy和連接原生的Redis Server沒有明顯的區別(不支持的命令列表),上層應用可以像使用單機的Redis一樣使用,Codis底層會處理請求的轉發,不停機的數據遷移等工作,所有後邊的一切事情,對

JVM(HotSpot)Java記憶體模型執行緒

注:本博文主要是基於JDK1.7會適當加入1.8內容。 1、Java記憶體模型 記憶體模型:在特定的操作協議下,對特定的記憶體或快取記憶體進行讀寫訪問的抽象過程。不同的物理機擁有不一樣的記憶體模型,而Java虛擬機器也擁有自己的記憶體模型。 主要目標:定義程式中各個變數的訪問規則,

VC非模態對話方塊建立銷燬

MFC應用程式中開啟模式對話方塊的函式呼叫順序 1.DoModal()             過載函式,過載DoModal()成員函式 2.PreSubclassWindow()   過載函式,允許首先子分類一個視窗 3.OnCreate()             訊息響應函式,響應WM_CREATE訊息

Qt4學習筆記( ),Qt 捕捉視窗關閉事件訊號的捕捉

有時候我們希望在關閉視窗之前做一些操作,例如儲存快取資料或向用戶提示是否關閉視窗等等。由於一般的視窗都是繼承自QWidget, 那麼我們可以通過覆蓋QWidget中的虛擬函式closeEvent(QCl

qt增資原始檔以及新增選單圖示工具欄中選單的快捷方式視窗以及對話方塊的icon

 1、file--new-QT resource file,就會在工程中新增一個資原始檔,然後單擊Add下拉框,選擇Add prefix,可以將生成的/new/prefix的字尾改為其他的名字,如file。然後在單擊Add下拉框,選擇Add files,將需要的圖示檔案新

Java工程師培訓課(的開始)

Genius夜光序言: 對一幅畫而言,論說是容易的,抒情是困難的,塗鴉是容易的,留白是困難的,簽名是容易的,蓋章是困難的。   正文:     包機制   問題:當定義了多個類的時候,可能會發生類名的重複問題。 在ja

對話方塊建立方式showDialog和DialogFragment

建立對話方塊  一個對話方塊一般是一個出現在當前Activity之上的一個小視窗. 處於下面的Activity失去焦點, 對話方塊接受所有的使用者互動. 對話方塊一般用於提示資訊和與當前應用程式直接相關的小功能.  Android API 支援下列型別的對話方塊物件:  警

Qt淺談之四QLineEdit的樣式和補全歷史記錄

一、簡介        利用背景圖片設計出QLineEdit新的樣式,起到美化介面的效果,並增加自動補全歷史記錄的功能,就可以作為一個完整的庫。  二、詳解 1、知識點 (1)切換QLineEdit的背景 void InnerLineEdit::setNormal()

Qt學習之路12--Qt標準對話方塊(字型對話方塊進度條對話方塊和列印對話方塊

使用預定義對話方塊的三板斧原則:定義物件後設置父元件和屬性、模態呼叫exec()、根據結果判斷執行流程。 字型對話方塊 字型對話方塊屬於Qt預定義的對話方塊型別,它的作用就是通過使用者得到字型型別並返回。 QFontDialog dia(this)

QT學習 之 對話方塊) 可擴充套件對話方塊

QT中的對話方塊是QDialog類 下面是三個主要的視窗的區別: QWidget類是所有使用者介面物件的基類。 視窗部件是使用者介面的一個基本單元:它從視窗系統接收滑鼠、鍵盤和其它事件,並且在螢幕上繪製自己。每一個視窗部件都是矩形的,並且它們按Z軸順序排列。一個視窗部件可以

Qt 之模式非模式半模式對話方塊

相關文章簡述關於“模式”和“非模式”對話方塊,相信大家都比較熟悉,但其中有一個可能很多人都比較陌生,介於兩者之間的狀態,我們稱之為“半模式“。| 模式對話方塊描述阻塞同一應用程式中其它可視視窗輸入的對話方塊。模式對話方塊有自己的事件迴圈,使用者必須完成這個對話方塊中的互動操作

NFS服務器配置和管理

nfs配置、文件共享、autofs11.1、NFS簡介 NFS是Network File System的縮寫,中文名為網絡文件系統,它是一種能使安裝了不同操作系統的計算機之間通過網絡進行共享的網絡協議。由於NFS可以快速地進行文件共享,有效地提供資源的利用率,節省本地磁盤空間,方便集中管理,所以應用廣泛。

構建之法第二章

交互 業界 用戶體驗 可用性 找到 方法 認同 我認 設計 用戶體驗有幾個層次:1 最基礎的是在交互環節,就是usablity,可用性,或者說易用性,大家說得最多的;要把可用性做好,不是太難,業界有成熟的方法,不需要太多天賦,兩個字:“用心”即可。 2 更高層次的乃情

java selenium () 操作彈出對話

exce key gif lee target his @value put java se 對話框類型 1. 警告框: 用於提示用戶相關信息的驗證結果, 錯誤或警告等 2. 提示框: 用於提示用戶在當前對話框中輸入數據,一般需要用戶單擊取消或者確認按鈕 3. 確認框

MySQL觸發器

mysql、觸發器 MySQL的觸發器和存儲過程一樣,都是嵌入到MySQL的一段程序。觸發器是由時間來觸發某個操作,這些時間包括INSERT、UODATE和DELETE語句。如果定義了觸發程序,當數據庫執行這些語句的時候就會觸發執行相應的操作,觸發程序是與表有關的命名數據庫對象,當表上出現特定事件時,當激活

事件對象

web lpad 常用 特殊 名詞 版本 特定 cap getchar 二十一、事件對象   JavaScript事件的一個重要方面是它們擁有一些相對一致的特點,可以給你的開發提供更多的強大功能。最方便和強大的就是事件對象,他們可以幫你處理鼠標事件和鍵盤敲擊方面的情況,

接口(接口的概念,實現,繼承,實現)抽象類抽象方法(抽象類,抽象方法概念,使用)

輸出 重寫 關鍵字 new clas main ride ring strac 接口 接口是一種用來定義程序的協議,它描述可屬於任何類和結構的一組相關行為。 接口可由方法、屬性、事件和索引器這四種成員類型的任何組合構成,但不能包含字段。 接口通過類繼承來實現,一個類雖然只能

叠代器生成器

gen 函數 返回 class gre 超出 新增 true 基礎上 叠代   叠代是一個重復的過程,每次重復即一次叠代,並且每次叠代的結果都是基於下一次叠代的結果   如公司軟件:基於第一次基礎上修改,發第二個版本,基於第二個,發第三個。。。 循環 while True