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...