2015-09-25 62 views
0

我正在修改現有的程序。我在類.h文件中:如何使用Qt的連接boost :: scoped_ptr <QWidget>

boost::scoped_ptr<QWidget> _widget; 

我在.cpp文件的方法:

void FaceRecoWidget::createWidget() 
{ 
    _widget.reset(new QDialog); 
    QVBoxLayout* layout(new QVBoxLayout); 

    // some stuff... 

    // Now I want to add a 'Cancel' button. This I what I do:  
    QPushButton* cancel_button(new QPushButton("Cancel")); 
    // but next line won't compile because _widget is not a 'const QObject*' 
    connect(cancel_button, SIGNAL(clicked()), _widget, SLOT(reject())); 

    layout->addWidget(cancel_button); 
    _widget->setLayout(layout); 
} 

如何解決此得到什麼?

+3

你不需要'scoped_ptr' this'作爲母:'_widget =新QDialog的(this);' –

+1

爲什麼混合兩個內存所有權模型?您正在編寫Qt,使用分層所有權模型。 –

回答

2

connect接受指針,所以你應該通過存儲在boost::scoped_ptr原始指針:如果你設置`

connect(cancel_button, SIGNAL(clicked()), _widget.get(), SLOT(reject()));