QT | 已解決:pure virtual method called ,terminate called without an active exception
阿新 • • 發佈:2018-12-13
在模擬一個編輯器時,在實現高亮時,針對每種程式語言,都新建一個類繼承了QSyntaxHighlighter高亮類。
接著在mainWindow中設定每個程式語言的選單項,都設定為可選擇型。
mainWindow中宣告一個QSyntaxHighlighter類的指標highlighter,每個曹函式中,如果選項沒有被選中,則呼叫解構函式,取消對應程式語言的高亮。
/**選擇C/C++高亮*/ void MainWindow::on_actionC_C_triggered(bool checked) { if(checked){ highlighter=new SyntaxhighlighterC(ui->textEdit->document()); }else{ if(!highlighter) highlighter->~QSyntaxHighlighter();//取消高亮 } } /**java高亮*/ void MainWindow::on_actionJava_triggered(bool checked) { if(checked){ highlighter=new SyntaxhighlighterJava(ui->textEdit->document()); }else{ if(!highlighter) highlighter->~QSyntaxHighlighter();//取消高亮 } } /**bash高亮*/ void MainWindow::on_actionBash_triggered(bool checked) { if(checked){ highlighter=new SyntaxhighlighterBash(ui->textEdit->document()); }else{ if(!highlighter) highlighter->~QSyntaxHighlighter();//取消高亮 } }
執行程式後,如果多次選擇取消不同的程式語言,會出現問題:pure virtual method called ,terminate called without an active exception,程式自動退出了。
猜想是因為highlighter只有一個,在多次選擇取消的操作下,可能會在highlighter已經被析構後沒有new的情況下,再次析構,所以才產生這個問題。故如上程式碼進行修改。
執行後OK.