Qt QStringListModel 插入项总是一下子添加两行

Qt QStringListModel 添加项 正常应该是点一下添加按钮,在列表最后一行插入一行,但是现在是两行两行的添加,插入项和删除项也是的,都是两行两行的。代码都是按照实例,不知道是什么问题

img

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    strList<<"北京"<<"上海"<<"广州";
    model=new QStringListModel(this);
    model->setStringList (strList);
    ui->listView->setModel (model);
    ui->listView->setEditTriggers (QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked);

    connect (ui->BtnAddItem,SIGNAL(clicked(bool)),this,SLOT(on_BtnAddItem_clicked()));
    connect (ui->BtnDeletItem,SIGNAL(clicked(bool)),this,SLOT(on_BtnDeletItem_clicked()));
    connect (ui->BtnInsertItem,SIGNAL(clicked(bool)),this,SLOT(on_BtnInsertItem_clicked()));
    connect (ui->BtnClearList,SIGNAL(clicked(bool)),this,SLOT(on_BtnClearList_clicked()));
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_BtnAddItem_clicked()
{
    model->insertRow (model->rowCount ());
    QModelIndex index=model->index (model->rowCount ()-1,0);
    model->setData (index,"新建项",Qt::DisplayRole);
    ui->listView->setCurrentIndex (index);
}


void MainWindow::on_BtnDeletItem_clicked()
{
    QModelIndex index=ui->listView->currentIndex ();
    model->removeRow (index.row ());
}


void MainWindow::on_BtnInsertItem_clicked()
{
    QModelIndex index=ui->listView->currentIndex ();
    model->insertRow (index.row ());
    model->setData (index,"插入项",Qt::DisplayRole);
    ui->listView->setCurrentIndex (index);
}


void MainWindow::on_BtnClearList_clicked()
{
    model->removeRows(0,model->rowCount ());
}



这是因为on_BtnAddItem_clicked这个命名模式的slot在ui->setupUi(this)里面调用的QMetaObject::connectSlotsByName会自动和匹配的signal进行connect,然后你又手动connect了一次,于是就等于connect了两次,所以每次clicked以后,slot会执行两次
你要么把手动connect的代码全都删掉,要么不要用on_objectName_signalName这种模式名称来命名的slot,这样就不会自动connect