I want switch different ctl in QListView when I clicked different button

Qt Code:
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3.  
  4. #include <QMainWindow>
  5. #include <QStandardItem>
  6. #include <QStandardItemModel>
  7. #include <QList>
  8. #include <QRadioButton>
  9. #include <QCheckBox>
  10. #include <QListView>
  11.  
  12. namespace Ui {
  13. class MainWindow;
  14. }
  15.  
  16. class MainWindow : public QMainWindow
  17. {
  18. Q_OBJECT
  19.  
  20. public:
  21. explicit MainWindow(QWidget *parent = 0);
  22. ~MainWindow();
  23.  
  24. private slots:
  25. void on_pushButton_clicked();
  26.  
  27. void on_pushButton_2_clicked();
  28.  
  29. void on_listView_clicked(const QModelIndex &index);
  30.  
  31. private:
  32. Ui::MainWindow *ui;
  33. void init();
  34. QListView *plist;
  35. QStandardItemModel *modelcheck;
  36. QStandardItemModel *modelradio;
  37. QList<QRadioButton*> lvradio;
  38. QList<QCheckBox*> lvcheck;
  39.  
  40. };
To copy to clipboard, switch view to plain text mode 

Qt Code:
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3.  
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. init ();
  10. }
  11.  
  12. MainWindow::~MainWindow()
  13. {
  14. delete ui;
  15. }
  16.  
  17. void MainWindow::init() {
  18.  
  19. plist = ui->listView;
  20. modelcheck = new QStandardItemModel();
  21. modelradio = new QStandardItemModel();
  22.  
  23. for (int i = 0; i < 10; ++i) {
  24. QRadioButton *p = new QRadioButton(QString("radio") + QString::number (i));
  25. lvradio.push_back (p);
  26. modelradio->appendRow (new QStandardItem(""));
  27. }
  28.  
  29. for (int i = 0; i < 11; ++i) {
  30. lvcheck.push_back (new QCheckBox(QString("check") + QString::number (i)));
  31. modelcheck->appendRow (new QStandardItem(""));
  32. }
  33. }
  34.  
  35. void MainWindow::on_pushButton_clicked() {
  36. plist->setModel (modelcheck);
  37. for (int i = 0; i < modelcheck->rowCount (); ++i) {
  38. lvcheck.at (i)->show ();
  39. plist->setIndexWidget (modelcheck->index (i, 0), lvcheck.at (i));
  40. }
  41. }
  42.  
  43. void MainWindow::on_pushButton_2_clicked() {
  44. plist->setModel (modelradio);
  45. for(int i = 0; i < modelradio->rowCount (); i++) {
  46. plist->setIndexWidget (modelradio->index (i, 0), lvradio.at (i));
  47. //here when use new QRadioButton("aa"); it works right
  48. }
  49. }
  50.  
  51. void MainWindow::on_listView_clicked(const QModelIndex &index) {
  52.  
  53. }
To copy to clipboard, switch view to plain text mode 

Qt Code:
  1. plist->setIndexWidget (modelcheck->index (i, 0), new QCheckBox("xxx"));
To copy to clipboard, switch view to plain text mode 
1.everytime I use new does it memleaks ?
2.why setIndexwidget(...) revive a SIGTERM