一、QStringListModel类的基本功能
- QStringListModel是用于处理字符串列表的数据模型
- QFileSystemModel可以和视图组件QListView结合使用,在界面中显示和编辑字符串列表
- 当为一个QListView组件设置QFileSystemModel数据模型之后,QListView显示的数据都是来自于QFileSystemModel数据模型,对QListView增删改查实质上是对QFileSystemModel数据模进行操作
二、QStringListModel的一些函数
//为QStringListModel数据模型对象初始化一个字符串列表
void QStringListModel::setStringList(const QStringList &strings)
//返回QStringListModel的所有内容
QStringList QStringListModel::stringList() const
//插入一行。在row行之前插入(插入的行没有任何内容)
bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex())
//根据传递的行号、列号、父项的模型索引生成一个模型索引
QModelIndex QAbstractListModel::index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const
//为index索引设置文本内容。参数3为设置数据的角色:如果想要内容显示就用(Qt::DisplayRole),内容不显示就用(Qt::DisplayPropertyRole)
bool QStringListModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
//删除row行
bool QAbstractItemModel::removeRow(int row, const QModelIndex &parent = QModelIndex())
//删除多行,从row开始删除count行
bool QStringListModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
三、QListView的一些函数
//为QListView组件设置数据模型
void QAbstractItemView::setModel(QAbstractItemModel *model)
//用于设置QListView的条目是否可以被编辑,参数为QAbstractItemView::EditTrigger枚举类型值的组合
void setEditTriggers(EditTriggers triggers)
//下面案例中用到QAbstractItemView::DoubleClicked|QAbstractItemView::SelectedClicked代表双击或者选中,QListView的条目可以被编辑
//若想要QListView的条目不可以被编辑,可以将参数设为QAbstractItemView::NoEditTriggers
//获得当前的选中索引
QModelIndex QAbstractItemView::currentIndex() const
//设置当前的选中索引
void QAbstractItemView::setCurrentIndex(const QModelIndex &index)
四、演示案例
- QLsitView里面是listView组件,用于显示QStringListModel数据模型的内容
- QPlainTextEdit里面的是PlainTextEdit组件,点击“实现数据模型的StringList”按钮之后,将listView组件的内容显示到PlainTextEdit中
代码
- 在类中定义一个QStringListModel对象
QStringListModel *theModel;
- 在构造函数中初始化以下代码
QStringList theStrList; theStrList<<QStringLiteral("北京")<<QStringLiteral("上海") <<QStringLiteral("天津")<<QStringLiteral("河北") <<QStringLiteral("山东")<<QStringLiteral("四川"); theModel=new QStringListModel(this); theModel->setStringList(theStrList); //设置theModel对象的初始化字符串列表 ui->listView->setModel(theModel); //设置数据模型 //设置listView的内容在双击或选择的状态下可以被编辑 ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked| QAbstractItemView::SelectedClicked);
- 在尾部添加项按钮clicked()信号函数
void MainWindow::on_benListAppend_clicked() { theModel->insertRow(theModel->rowCount());//在尾部插入一空行 //因为在尾部添加上,此处获取最后一个索引 QModelIndex index=theModel->index(theModel->rowCount()-1,0); //在index处新增一行。Qt::DisplayPropertyRole内容不显示 theModel->setData(index,"new item",Qt::DisplayPropertyRole); ui->listView->setCurrentIndex(index);//设置当前选中的行 }
- 插入项按钮clicked()信号函数
void MainWindow::on_benListInsert_clicked() { QModelIndex index=ui->listView->currentIndex();//获取当前索引 //在index处新增一行 theModel->insertRow(index.row()); //为index行设置数据,Qt::DisplayRole(内容显示) theModel->setData(index,"inserted item",Qt::DisplayRole); ui->listView->setCurrentIndex(index);//设置当前选中的行 }
- 删除项按钮clicked()信号函数
void MainWindow::on_benListDelete_clicked() { //获得当前索引并删除 QModelIndex index=ui->listView->currentIndex(); theModel->removeRow(index.row()); }
- 清空按钮clicked()信号函数
void MainWindow::on_benListClear_clicked() { theModel->removeRows(0,theModel->rowCount());//清空所有 }
- “实现数据模型的StringList”按钮的clicked()信号函数
void MainWindow::on_btnTextImport_clicked() { QStringList tmpList=theModel->stringList();//获得QStringListModel对象的字符串列表 ui->plainTextEdit->clear(); for(int i=0;i<tmpList.count();++i)//循环添加到plainTextEdit ui->plainTextEdit->appendPlainText(tmpList.at(i)); }
- QListView的clicked槽函数
void MainWindow::on_listView_clicked(const QModelIndex &index) { //将当前点击的项的信息设置到LabInfo控件中 ui->LabInfo->setText(QString::asprintf("current:row=%d,column=%d",index.row(),index.column())); }