Qt:25---QStringListModel数据模型

一、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()));
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董哥的黑板报

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值