加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于QT的模型model

(2013-02-01 15:00:31)
QT中有QStringListModel,QDirModel,这都是先建立一个 model,然后listView.setmodel(model)或者treeVIew.setMODEL(MODEL);一般还有QStringlISTmodel是一个字符串一样的,所以可以,model.setStirngList(xx),xx是一个QStirngList系列,比如lsit<<"haha"<<"heheh"<<"oo";还可以设置这个视图view的一些属性,比如setedittriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked);这表示任何键只要双击就让他出于可编辑状态。
对于这个模型和视图,有个ModelIndex类比较重要,index是个索引,比如你要在一个model中插入一行,然后再view中显示,首先在view中得到你点击或者其他方式得到的索引行:int row = listview->currentIndex().row();然后再模型里插入一行,model-》insertRows(row,1);这插入的是在这个行的前面插入的。然后把这个插入的行,也就是这个row作为当前的的索引,QModelIndex index = model-》index(row);lsietview-》setCurrentIndex(index);然后让这个索引可编辑,listview-》edit(index);

对于移除的操作比较简单:
直接在模型中移除就行了,model-》removeRows(listVIEW->currentIndex().row,1);表示在这个索引,删掉一行。。
int row = ui->listView->currentIndex().row();//获取你点击的那个行
    model->insertRows(row,1);//然后再这个索引后面插入一行
    QModelIndex index = model->index(row);//把这个插入的这个行作为索引
    ui->listView->setCurrentIndex(index);//然后把这个索引作为当前的索引
    ui->listView->edit(index);//设置进入编辑状态


QDirModel也一样,也是调用一个treeView显示,,treevIEW.setMOdel(model);QDir::currentPath();表示当前路径;
model =  new QDirModel(this);
    model->setReadOnly(false);//设置可以更改
    model->setSorting(QDir::DirsFirst|QDir::IgnoreCase|QDir::Name);//设置路径的排列顺序
    ui->treeView->setModel(model);//视图显示模型的数据
    ui->treeView->header()->setStretchLastSection(true);
    ui->treeView->header()->setSortIndicator(0, Qt::AscendingOrder);
    ui->treeView->header()->setSortIndicatorShown(true);
    ui->treeView->header()->setClickable(true);

    QModelIndex index;
    index = model->index(QDir::currentPath());
    ui->treeView->expand(index);
    ui->treeView->scrollTo(index);
    ui->treeView->resizeColumnToContents(0);

今天还写了一下QSortFilterProxyModel,首先是建个QStirnglismodel,QDirmodel之类的模型,然后建个QSortFilterProxyModel这样的过滤排序模型,最后将上面的那个QStirnglismodel model模型安装在此,

sourcemodel = new QStringListModel(this);

    sourcemodel->setStringList(QColor::colorNames());



    proxyModel = new QSortFilterProxyModel(this);

    proxyModel->setSourceModel(sourcemodel);//把这个系列模型安装在过滤模型里
像这样
然后再建个view之类的视图来显示它

在学习这时,还遇到了QRegExp这样的正则表达式,这个是有点难。
正则表达式的作用是1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。(2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。(3)用来替换,比普通的替换更强大。

表达式

可匹配

\d

任意一个数字,0~9 中的任意一个

\w

任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个

\s

包括空格、制表符、换页符等空白字符的其中任意一个

.

小数点可以匹配除了换行符(\n)以外的任意一个字符

0

阅读 收藏 喜欢 打印举报/Report
前一篇:QT模版
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有