如何在std :: vector中删除QLabel和QwtSlider

时间:2014-06-19 14:18:46

标签: c++ qt vector qwt

我有一个std::vector填充了QLabelQwtSlider指针,我想删除指针而不是向量。

这是我的代码:

QLabel *sliderSimuVarLabel;
std::vector<QLabel*>    labelsSimuVarList;
std::vector<QwtSlider*> slidersSimuVarList;

int num = 3;
for (int i=0; i<numSimuVars; ++i){

   sliderSimuVarLabel = new QLabel("Hello", Widg);  
   sliderSimuVarLabel->setFont(panelFont2);

   labelsSimuVarList.push_back(new QLabelWidg));                                      
   labelsSimuVarList[i]->setFont(panelFont2);

   slidersSimuVarList.push_back(new QwtSlider(Qt::Horizontal,Widg));

   layoutSimuPanel->addWidget(sliderSimuVarLabel,i+7,0);
   layoutSimuPanel->addWidget(slidersSimuVarList[i],i+7,1,1,5);
   layoutSimuPanel->addWidget(labelsSimuVarList[i], i+7, 7);
}

我不知道用哪种方法删除指针:clear()deleteLater()?其他

2 个答案:

答案 0 :(得分:5)

使用std::unique_ptr。在这种情况下,您不必做任何事情来清理对象,并且在例外或早期返回的情况下它是安全的。不要自己delete任何事情,因为这样做非常不安全。我相信Qt还提供了一些自己的智能指针,Boost还提供shared_ptr和其他供您使用。

答案 1 :(得分:-6)

要从矢量中删除对象(指针)并删除它们,您可以:

// Remove elements from the back
while (!labelsSimuVarList.empty()) {
    delete labelsSimuVarList.back();
    labelsSimuVarList.pop_back();
}