Qt 模型视图

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);
}

你可能感兴趣的:(C++/QT)