Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QStringList data;
data << "Letter A" << "Letter B" << "Letter C";
model = new QStringListModel(this);
model->setStringList(data);
listView = new QListView(this);
listView->setModel(model);
QHBoxLayout *btnLayout = new QHBoxLayout;
QPushButton *insertBtn = new QPushButton(tr("insert"), this);
connect(insertBtn, SIGNAL(clicked()), this, SLOT(insertData()));
QPushButton *delBtn = new QPushButton(tr("Delete"), this);
connect(delBtn, SIGNAL(clicked()), this, SLOT(deleteData()));
QPushButton *showBtn = new QPushButton(tr("Show"), this);
connect(showBtn, SIGNAL(clicked()), this, SLOT(showData()));
btnLayout->addWidget(insertBtn);
btnLayout->addWidget(delBtn);
btnLayout->addWidget(showBtn);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(listView);
mainLayout->addLayout(btnLayout);
setLayout(mainLayout);
}
Widget::~Widget()
{
}
///关于QStringListModel我们简单介绍这些。从这些示例中可以看到,
/// 几乎所有操作都是针对模型的,也就是说,我们直接对数据进行操作,
/// 当模型检测到数据发生了变化,会立刻通知视图进行刷新。这样,我
/// 们就可以把精力集中到对数据的操作上,而不用担心视图的同步显示
/// 问题。这正是 model/view 模型所带来的一个便捷之处
void Widget::insertData()
{
bool isOK;
QString text = QInputDialog::getText(this, "Insert",
"Please input new data:",
QLineEdit::Normal,
"You are inserting new data.",
&isOK);
if(isOK)
{
QModelIndex currIndex = listView->currentIndex();
model->insertRows(currIndex.row(),1);//插入当前位置一行
model->setData(currIndex,text); //更新数据
listView->edit(currIndex);//可编辑
}
}
void Widget::deleteData()
{
if (model->rowCount() > 1) {
model->removeRows(listView->currentIndex().row(), 1);
}
}
void Widget::showData()
{
QStringList data = model->stringList();
QString str;
foreach(QString s, data) {
str += s + "\n";
}
//QMessageBox::information(this, "Data", str);
}