2016-09-30 602 views
-1

我正在創建我的第一個Qt程序之一。我有這個登錄表單,然後提供的用戶名和密碼將被檢查到MYSQL數據庫。 如果這個用戶名和密碼的記錄,那麼就做一些退出Qt程序崩潰

ui->something->hide(); 

有沒有特別的Qt的控制檯輸出運行時,但是當我用「X」按鈕來關閉它的程序崩潰。

我在調試模式下運行它。 我得到了什麼:

「的劣質停止,因爲它從操作系統 系統接收的信號 信號名稱:SIGSEGV信號含義:分段故障

+1

嘗試檢查堆棧幀例如與gdb – Trevir

+1

你可以在這裏發佈一些代碼? – PRIME

+1

如果僅僅通過查看這個程序集就無法確定問題是什麼,那麼應該扔掉計算機並放棄編程:D – dtech

回答

0

也許正在發生的事情是,你必須這是走出去的範圍對象。

當事情被刪除,或不再可訪問,然後您嘗試訪問它,你就會得到這個。

個兩個動作,你應該採取:

如果創建Qt中的一個對象,把它放在一堆,然後父母就在對象樹。

例如:

QLabel * label = new QLabel(); // put it on the heap using new 

ui->centralWidget()->layout()->addWidget(label); 

你的標籤,現在是在對象樹。標籤的父級是佈局對象。它的父母是中心部件。它的父母是ui。

當窗口關閉時,它會自動清理所有的孩子,或者換句話說,你不必調用刪除每一個。

偶爾例子表明不上堆的東西,但通常除非是像沒有其他地方引用對話框中的短命的項目並不在大規模的例子很好地工作。

也在你的closeEvent()你應該清理對你的數據庫的訪問。查看數據庫示例並查找用於關閉句柄到數據庫的代碼行。

如果您正在清理並且有可能在運行時不可用,則應該檢查。

if(label) 
    label->setText("I am closing now"); 

而且在某些情況下,您可能希望在刪除或關閉後將指針設置爲零。

希望有所幫助。