(二)使用预定义模型 QStringListModel例子
?
?
teamleadersdialog.h
?
#include <QtGui>#include "teamleadersdialog.h"TeamLeadersDialog::TeamLeadersDialog(const QStringList &leaders, QWidget *parent) : QDialog(parent){ //创建并组装一个QStringListModel model = new QStringListModel(this); model->setStringList(leaders); //创建一个QListView listView = new QListView; //设置模型 listView->setModel(model); //设置QListView编辑触发器:通过开始输入或者双击进入编辑字符串的状态 listView->setEditTriggers(QAbstractItemView::AnyKeyPressed | QAbstractItemView::DoubleClicked); // buttonBox = new QDialogButtonBox(); QPushButton *insertButton = buttonBox->addButton(tr("&Insert"), QDialogButtonBox::ActionRole); QPushButton *deleteButton = buttonBox->addButton(tr("&Delete"), QDialogButtonBox::ActionRole); buttonBox->addButton(QDialogButtonBox::Ok); buttonBox->addButton(QDialogButtonBox::Cancel); //信号槽绑定插入、删除按钮 connect(insertButton, SIGNAL(clicked()), this, SLOT(insert())); connect(deleteButton, SIGNAL(clicked()), this, SLOT(del())); //按钮盒的ok和Cancel事件 connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); //界面竖直布局listView和buttonBox QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(listView); mainLayout->addWidget(buttonBox); //设置当前窗口的布局为mainLayout setLayout(mainLayout); setWindowTitle(tr("Team Leaders"));}//获取当前模型中的内容QStringList TeamLeadersDialog::leaders() const{ return model->stringList();}void TeamLeadersDialog::insert(){ //从列表视图得到当前项的行数 int row = listView->currentIndex().row(); //在模型中插入一个新行,并且模型会自动更新列表视图 model->insertRows(row, 1); //获取当前行在模型中的"模型索引" QModelIndex index = model->index(row); //设置刚刚插入的空白行为列表视图的当前索引 listView->setCurrentIndex(index); //设置列表视图在当前行进入编辑状态 listView->edit(index);}void TeamLeadersDialog::del(){ //从目前行开始,共删除1行model数据,并自动更新列表视图 model->removeRows(listView->currentIndex().row(), 1);}?