您好,登錄后才能下訂單哦!
由.ui文件生成的類的構造函數里都有一個setupUi(this)。這個函數的作用是對界面進行初始化,它按照我們在Qt設計器里設計的樣子把窗體畫出來,把我們在Qt設計器里面定義的信號和槽建立起來。也可以說,setupUi 是我們畫界面和寫程序之間的橋梁。
但有一點需要注意的是,setupUi在執行的時候會觸發界面上的事件。如果忽視了這點,那可能就會遇到一些莫明其妙的麻煩。
我曾在一個類的構造函數里這樣寫:
{
setupUi(this); //系統自動生成的
bool flag=false; //對我自己定義的變量初始化
...
}
界面上有一個tabWidget,我定義了一個槽來接收tabWidget的tabClicked()信號,在該槽里用到flag變量。
調試程序中發現此類不穩定,經常會在類生成時突然跳出,什么提示也沒有。
起初我以為類的構造函數應該是最先執行的,構造完成之后這個類才開始正式運轉,發生各種信號和槽的關系。這么考慮起來,這個類沒有任何理由不穩定。可是從現象上看,一定是有某個地方有內存操作的異常,這個異常引起了程序的不可靠。
問題出面哪里?
我懷疑過開發環境,于是從QDevelop環境遷移到了QCreator,不管用。懷疑過操作平臺,換了幾個Linux的發行版,也不好使。
后來在QCreator的調試模式下運行,在系統崩潰后查看調用棧時發現,類生成的過程里,居然觸發了好多窗體上的事件!
這一定是setupUi運行時發生的事。
因為在類的構造函數里我把自己定義的變量初始化都放到了setupUi之后,這樣,在窗體事件時用到了一些未初始化的變量,從而引起系統不可靠。
后來修改了類的構造函數,把setupUi移到變量初始化的后面,于是問題全部解決
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。