2014-07-25 35 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的手柄信号优雅和删除对象当这样做是安全的时候。