StupidBeauty
??Read times:42????Posted at:Fri Mar 17 00:13:43 2017?? - no title specified

Qt5.7文档翻译:QAbstractItemView,QAbstractItemView Class

QAbstractItemView 类,提供 了用于条目视图 类的基本功能 详细说明……

头文件:

#include <QAbstractItemView>

qmake指令

QT += widgets

继承

QAbstractScrollArea

被继承:

QColumnView QHeaderView QListView QTableView QTreeView

详细说明

QAbstractItemView 类,提供 了用于条目视图 类的基本功能

QAbstractItemView 类,是每一个会用到 QAbstractItemModel 的标准视图类的基类。 QAbstractItemView 是一个抽象类,本身无法被实例化。 它提供了一个标准接口,通过这个标准接口,可利用信号和信号槽机制来与模型进行交互 ,使得子类能够跟踪 到模型中发生的变化。 这个类,还为以下事务提供了标准化支持:键盘 及鼠标导航;视界 (viewport)滚动;条目编辑;和选择。具体 地,键盘导航实现了以下功能:

按键

功能

方向

改变当前条目,并且选中它。

Ctrl+方向

改变当前条目,但不选中它。

Shift+方向

改变当前条目,并且选中它。之前被选中的条目,仍然保持选中状态。

Ctr+空格

切换当前条目的选中状态。

跳格(Tab)/反跳格(Backtab)

将当前条目改变成下一个/前一个条目。

Home/End

选中模型中的第一个/最后一个条目。

上翻页/下翻页

将视图向上/向下滚动,滚动的数量是,视图中可见的行数。

Ctrl+A

选中模型中所有的条目。

注意 ,上表有个前提,就是,当前 选择模式 允许进行这些操作。例如, 当选择模式被设置成 QAbstractItemView::NoSelection 的时候,妳就无法选中条目了。

QAbstractItemView 类,是 模型/视图 中的一个,并且是Qt 中 模型视图框架 的组成部分。

继承 QAbstractItemView 的那些视图类,只需要实现与自身视图属性相关的功能,例如绘制条目外观 、返回条目的几何属性、查找条目,等等。

QAbstractItemView 提供 了一些常用的信号槽,例如 edit () setCurrentIndex ()。 还提供了狠多受保护的(protected)信号槽,包括 dataChanged () rowsInserted () rowsAboutToBeRemoved () selectionChanged () currentChanged ()。

根条目由 rootIndex ()返回,当前条目由 currentIndex ()返回。 要确保某个条目可见,则调用 scrollTo ()。

QAbstractItemView 的某些函数是针对滚动功能而开发的,例如 setHorizontalScrollMode ()和 setVerticalScrollMode ()。 要设置滚动条的范围的话,可覆盖该视图的 resizeEvent ()函数:

void MyView::resizeEvent( QResizeEvent *event) {

horizontalScrollBar()->setRange(0, realWidth - width());

...

}

注意,范围只在部件被显示的时刻才会更新。

还有另一些函数是针对选择控制功能而开发的;例如, setSelectionMode () ,和 setSelectionBehavior () 这个类,提供了一个默认的选择模型 ( selectionModel ()) ,但是,这个也是可以替换掉的,具体就是调用 setSelectionModel (),并传入一个 QItemSelectionModel 实例。

若想要完全控制对于条目的显示及编辑过程,则,调用 setItemDelegate () 来设置一个代理(delegate)。

QAbstractItemView 提供 了狠多受保护的函数。其中 的某些是针对编辑功能开发的,例如 edit ()和 commitData (), 而其它的一些函数是针对键盘及鼠标事件处理的。

注意 如果 妳继承了 QAbstractItemView 且想要更新视界中的内容的话,则应当调用viewport-> update ()而不是 update() ,因为 ,所有的绘图操作都是发生在视界中的。

参考 视图 模型/视图编 QAbstractItemModel 表格示例

属性文档

alternatingRowColors : bool

这个属性,指定的是,是否要以两种不同颜色来绘制条目的背景。

如果 此属性设置为真( true ),那么,相邻条目的背景会依次使用 QPalette::Base QPalette::AlternateBase 来绘制;否则,条目 的背景会全部使用 QPalette::Base 来绘制。

默认情况 下,此属性的值是假( false )。

访问函数

bool

alternatingRowColors() const

void

setAlternatingRowColors(bool enable)

iconSize  :  QSize

此属性,指定的是,各个条目的图标的尺寸。

若在此视图可见的情况下设置此属性,会导致视图中的条目被重新布局。

访问函数

QSize

iconSize() const

void

setIconSize(const QSize &size)

事件通知信号

void

iconSizeChanged(const QSize &size)

textElideMode  :  Qt::TextElideMode

此属性,指定的是,在发生文字省略时,省略号"..."所处的位置。

所有条目视图 中此属性 的默认值是 Qt::ElideRight

访问函数

Qt::TextElideMode

textElideMode() const

void

setTextElideMode(Qt::TextElideMode mode)

成员函数文档

[signal] void  QAbstractItemView:: activated (const  QModelIndex  & index )

当用户激活了 index 所指向的条目时,会发射出这个信号。至于如何激活条目,则取决于平台;例如,可能是单击该条目,或双击该条目,或在该个条目是当前条目时按下回车键(Return)或确认键(Enter)。

参考 clicked () doubleClicked () entered () pressed ()

[signal] void  QAbstractItemView:: clicked (const  QModelIndex  & index )

当某个鼠标按键被进行左点击时,会发射此信号。具体在其上发生鼠标点击事件的条目,是由 index 指定的。只有在索引有效的情况下,才会发射这个信号。

参考 activated () doubleClicked () entered () pressed ()

QModelIndex  QAbstractItemView:: currentIndex () const

返回当前条目的模型索引。

参考 setCurrentIndex ()

[virtual protected slot] void  QAbstractItemView:: dataChanged (const  QModelIndex  & topLeft , const  QModelIndex & bottomRight , const  QVector < int > & roles  = QVector<int> ())

当模型中具有指定角色 roles 的某些条目发生变更时,会调用这个信号槽。具体发生了变更的条目,其范围是从左上角 topLeft 到右下角 bottomRight ,并且包含二者。如果仅仅只有一个条目发生改变,则 topLeft  ==  bottomRight

发生改变的角色,由 roles 指定,它可能是一个空容器(意味着所有角色全部发生改变),或者是一个非空的容器,其中就具体包含着发生了改变的那些角色子集。

[pure virtual] QModelIndex  QAbstractItemView:: indexAt (const  QPoint  & point ) const

返回位于视界中坐标 point 处的条目所对应的模型索引。

在基类中,这个函数是个纯虚函数。

参考 visualRect ()

QWidget  *QAbstractItemView:: indexWidget (const  QModelIndex  & index ) const

返回指定索引index 的条目所对应的部件。

此函数是从Qt 4.1 开始引入的。

参考 setIndexWidget ()

QAbstractItemDelegate  *QAbstractItemView:: itemDelegate () const

返回 被这个视图和其模型所使用的条目代理。 它或者是由 setItemDelegate ()设置的,或者是默认的。

参考 setItemDelegate ()

QAbstractItemDelegate  *QAbstractItemView:: itemDelegate (const  QModelIndex  & index ) const

返回被这个视图和其模型针对指定索引 index 所使用的条目代理。

QAbstractItemDelegate  *QAbstractItemView:: itemDelegateForColumn ( int column ) const

返回 这个视图和其模型针对指定列 column 所使用的条目代理。 妳可调用函数 itemDelegate (),来获取到针对指定索引的当前代理的指针。

此函数是从Qt 4.2 开始引入的。

参考 setItemDelegateForColumn () itemDelegateForRow () itemDelegate ()

QAbstractItemDelegate  *QAbstractItemView:: itemDelegateForRow ( int row ) const

返回 这个视图和其模型针对指定行 row 所使用的条目代理,或者 ,如果未设置任何代理则返回0。 妳可调用函数 itemDelegate (),来获取到针对指定索引的当前代理的指针。

此函数是从Qt 4.2 开始引入的。

参考 setItemDelegateForRow () itemDelegateForColumn () setItemDelegate ()

[virtual] void  QAbstractItemView:: keyboardSearch (const  QString  & search )

并且选中与搜索字符串 search 最佳匹配的条目。如果未找到任何条目,则什么事都不会发生。

在默认实现中,两种情况下会导致搜索结果被重置: search 是空的;或者, 自上次的搜索动作以来, 所经过的时间超过了 QApplication::keyboardInputInterval ()。

QModelIndex  QAbstractItemView:: rootIndex () const

返回其模型的根条目的模型索引。根条目,即为,这个视图中的顶级条目的亲代条目。根条目可能是无效的。

参考 setRootIndex ()

[pure virtual] void  QAbstractItemView:: scrollTo (const  QModelIndex  & index ScrollHint hint  = EnsureVisible)

在必要的情况下滚动视图,以使得位于索引 index 处的条目处于可见状态。视图会尝试根据指定的滚动建议 hint 来将该条目放置到适当的位置。

在基类中,这个函数是一个纯虚函数。

void  QAbstractItemView:: setIndexWidget (const  QModelIndex  & index QWidget  * widget )

将指定的部件 widget 设置到位于指定索引 index 的条目上,该部件的所有权被转移给视界。

如果index无效(例如,妳传入了根索引),则这个函数什么也不会做。

指定部件 widget autoFillBackground 属性必须设置为真(true),否则, 这个部件的背景就会是透明的,使得,对于指定的索引 index ,模型数据 条目部件同时被显示出来。

如果索引部件A 被索引部件B 替换,则,索引部件A 就会被删除。例如,下面 的代码中, QLineEdit 对象 会被删除。

setIndexWidget(index, new QLineEdit );

...

setIndexWidget(index, new QTextEdit );

这个函数,应当仅仅用于 在可见区域中显示针对某个条目数据的静态内容。如果 妳想要显示自定义的动态内容,或者想要实现一个自定义的编辑器部件,则,应当子类化 QItemDelegate

这个函数是从Qt 4.1 开始引入的。

参考 indexWidget () 代理

void  QAbstractItemView:: setItemDelegate ( QAbstractItemDelegate  * delegate )

将这个视图和其模型的条目代理设置成 delegate 。如果妳想要完全控制针对条目的编辑和显示过程的话,则应当使用这种方式。

任何已有 的代理都会被移除,但不会被删除。 QAbstractItemView 不会夺取 delegate 的所有权。

警告: 妳不应当在多个视图之间共享 同一个代理实例。如果 妳这样做的话,就会引起 不正确或不一致的编辑行为,因为,连接 到指定代理的每个视图都可能会 closeEditor() 收到信号,进而尝试 去访问、修改或关闭某个之前已经被关闭的编辑器。

参考 itemDelegate ()

[virtual] void  QAbstractItemView:: setModel ( QAbstractItemModel  * model )

设置要由此视图来呈现的模型( model )。

这个函数,会创建且设置一个新的选择模型, 它会替换掉之前使用 setSelectionModel ()设置 的任何模型。然而 ,旧的选择模型不会被删除,因为它可能是被多个视图共享的。 我们建议,如果旧的选择模型不再有用 处的话,则,应当删除旧的模型。通过 以下代码可以做到这一点:

QItemSelectionModel *m = view->selectionModel();

view->setModel(new model);

delete m;

如果 旧模型和旧选择模型都不具有亲代对象,或者它们的亲代对象是一些长寿对象,那么, 可以考虑调用它们的 deleteLater ()函数来显式删除它们。

这个视图 不会 夺取该个模型的所有权,除非它本身就是那个模型的亲代对象。这是因为,该模型可能是被多个不同视图共享的。

参考 model () selectionModel () setSelectionModel ()

未知美人

http://m.xuite.net/photo/a0923161742/5871910/14

金巧巧

光影

- no title specified

为OsoLinux用户提供的RPM包仓库

 
??Like this article? Give us some tips.??