关于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 |
任意一个字母或数字或下划线,也就是 |
|
\s |
包括空格、制表符、换页符等空白字符的其中任意一个 |
|
. |
小数点可以匹配除了换行符(\n)以外的任意一个字符 |
前一篇:QT模版
后一篇:QRegExp正则表达式(1)

加载中…