2014-07-25 37 views
-1

我實現了一個代碼,用於在圖形視圖中點擊按鈕來添加項目,如圓圈,線條等。在信號和插槽的幫助下,我可以通過單擊按鈕多次添加項目。例如,當我按下「線路」按鈕時,我可以添加線路多少次,並且無需再次按下按鈕,爲了銷燬這個我使用keyevents,即當我推動ESC時,該事件應該結束。但是當我這樣做時,應用程序崩潰,窗口關閉。以下是代碼片段。請你檢查什麼錯誤Qt中的關鍵事件

mainwindow.h

#include "line.h" 



    namespace Ui { 
    class MainWindow; 
    } 

    class MainWindow : public QMainWindow 
    { 
     Q_OBJECT 

    public: 
     explicit MainWindow(QWidget *parent = 0); 
     ~MainWindow(); 


     QPainter *painter; 
     line *item1; 



    private slots: 
     void drawLine(); 

mainwindow.cpp

void MainWindow::drawLine(){ 
     ui->graphicsView->setScene(scene); 
     item1 = new line; 
     scene->addItem(item1); 
     qDebug() << "Line Created"; 
     connect(item1, SIGNAL(DrawFinished()), this, SLOT(drawLine())); 
    } 


    void MainWindow::keyPressEvent(QKeyEvent *event) 
    { 
    if(event->key() == Qt::ESC) { 
     connect(item1, SIGNAL(DrawFinished(),SLOT(drawLine())); 
     scene->remove(item1); 

} 
+2

這不會編譯。缺少'}'括號和'''括號。粘貼您正在運行的實際代碼的相關片段。 – BartoszKP

回答

1

使用

itemN->deleteLater(); 

這將讓Qt的手柄信號優雅和刪除對象當這樣做是安全的時候。