筆記 在堆上和棧上建立對話方塊物件

2021-06-26 02:42:17 字數 842 閱讀 8072

1、在棧上建立對話方塊:

qdialog dialog(this);

引用時用點.:

dialog.setwindowtitle(tr("..."));

dialog.exec();//這是採用模態對話方塊

dialog.show();//這是採用非模態對話方塊,而當物件建立在棧上,非

模態對話方塊會一閃消失這是因為,show() 函式不會阻塞當前執行緒,對話方塊會顯示出來,然後函式立即返回,**繼續執行。注意,dialog 是建立在棧上的,show() 函式返回,mainwindow::open() 函式結束,dialog 超出作用域被析構,因此對話方塊消失了。

2、在堆上建立物件

qdialog *dialog = new qdialog(this);

引用時用箭頭:

dialog->show();//這是在堆上建立的對話方塊物件,即使採用show()也不會消失

3、頂層視窗與非頂層視窗的區別:頂層視窗在工作列會有自己的位置,而非頂層視窗則會共享其父元件的位置。

4、在堆上建立對話方塊,不用mainwindow作為父視窗則關閉對話方塊卻沒有delete,而想用mainwindow作為父視窗時,若不是在介面類mainwindow中出現dialog時,也無法使用this指標,這時可以設定dialog的window attribute

:dialog->setattribute(qt::wa_deleteonclose);//

setattribute() 函式設定對話方塊關閉時,自動銷毀對話方塊。另外,qobject     還有乙個 deletelater() 函式,該函式會在當前事件迴圈結束時銷毀該對話方塊(具體到這裡,需要使用 exec() 開始乙個新的事件迴圈)。

物件只能建立在棧上(堆上)

只能建立在棧上 禁用new操作符,變數就只能定義在棧上了,new operator首先呼叫operator new,把operator new定義為private即可 class a void operator delete public a 只能建立在堆上 不能直接呼叫析構函式,那麼就無法在棧上建...

MFC筆記 建立模態對話方塊和非模態對話方塊

建立模態對話方塊 新建乙個對話方塊,對話方塊生成類。在要載入對話方塊的類前新增標頭檔案 生成模態對話方塊的地方 ctest ctrst ctest.domodal 建立非模態對話方塊 新建乙個對話方塊,生成類。要載入的對話方塊類新增成員變數 csweepfreq m sweepferq 類名,變數名...

類建立堆上和棧上實現

原因 如何在堆上和棧上建立類 概況 普通的區域性變數宣告被建立在棧上,如a a 而通過new進行建立的類物件則被分配到堆上如a a new a 類只在堆上建立,只需要將析構函式設定為private型別即可如下 編譯器在為類物件分配空間時會檢查析構函式的訪問性。class tec public voi...