设为首页 加入收藏

TOP

13.2.1 角色与数据子项
2013-10-07 15:18:43 来源: 作者: 【 】 浏览:59
Tags:13.2.1 角色 数据

13.2.1  角色与数据子项

模型中的一个数据项会存放多个数据子项,其中一些是应用程序本身需要处理的数据,另外一些是Model/View框架中其他部分(比如视图对象、委托对象等)需要处理的。我们将一个数据子项所起的作用称为它的"角色"(role),因而一个数据项可被看作多个『角色,数据子项』对组成的集合。

例如,图13 8中的程序显示2011年世界10大新闻。左侧列表显示这些新闻的标题以及图标。用户单击其中一个后,程序在右上方显示该新闻的图片,在右下方以英文显示该新闻。如果用户将鼠标停留在列表中某个数据项的区域内,程序弹出一个提示框,显示该新闻中文版的文字。

我们使用一个具有列表结构的模型来表示这10条新闻,模型中的每个数据项表示一条新闻。新闻的标题(比如图中的"墨西哥海底雕塑")是一个数据子项,对应的角色为DisplayRole,视图对象总是显示这个数据子项。新闻的图标是一个数据子项,对应的角色为DecorationRole。视图对象可能显示这个数据子项,也可能忽略它而只显示DisplayRole对应的数据子项。提示框中的中文文字是一个数据子项,对应的角色为ToolTipRole。只要用户将鼠标停留在一个数据项的区域内,视图对象就会显示这个数据子项。以上角色对应的数据子项和Model/View框架密切相关,框架中的其他对象比如视图对象、委托对象等会读取这些数据子项并做相应的处理。应用程序还可以在角色UserRole对应的数据子项中存放一些与具体应用相关的数据,例如,本例将一条新闻的英文文字内容存放在这个数据子项中。当用户单击某个数据子项时,应用程序读取这个数据子项,将其中的文字显示在界面右下角的位置。

 
(点击查看大图)图13 8  一个数据项含有不同角色的数据子项

通用的角色如表13 1所示,所有的角色名字都被定义在名字空间Qt中。所有数据子项都具有类型QVariant,但是QVariant中所存放的数据的类型会因角色的不同而不同。例如,对于角色WhatsThisRole,这个类型为QString,表示所要显示的文字,而对于角色SizeHintRole,这个类型为QSize,表示数据项的尺寸。当我们向数据子项写入数据时,应该遵循这些约定。

表13 1  通用的角色以及对应数据子项的功能与类型

常量< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

对应的数据子项

QVariant中数据的类型

Qt::DisplayRole

代表一个数据项的文字

QString或者数值类型

Qt::DecorationRole

代表一个数据项的图标

QColor, QIcon QPixmap

Qt::EditRole

对一个数据项进行编辑时所要处理的数据

QString或其他

续表

常量

对应的数据子项

QVariant中数据的类型

Qt::ToolTipRole

鼠标停留在一个数据项区域内时,提示框中所要显示的文字

QString

Qt::StatusTipRole

鼠标停留在一个数据项区域内时,状态栏所要显示的文字

QString

Qt::WhatsThisRole

用户对一个数据项执行“What's This ”命令时所要显示的文字

QString

Qt::SizeHintRole

一个数据项所占据的屏幕尺寸

QSize

和数据项外观相关的角色如表13 2所示。通过设置这些数据子项,应用程序可以控制数据项的外观。某些数据项被用来存放布尔类型的值,视图对象在显示DisplayRole对应的数据子项的同时,还可以显示一个复选框。角色CheckStateRole对应的数据子项表示这个复选框的状态。

表13 2  和数据项外观相关的角色

常量

对应的数据子项

QVariant中数据的类型

Qt::FontRole

显示DisplayRole对应数据子项时所用的字体

QFont

Qt::TextAlignmentRole

显示DisplayRole对应数据子项时所用的文字对齐方式

Qt::AlignmentFlag

Qt::BackgroundRole

显示DisplayRole对应数据子项时所用的背景刷子

QBrush

Qt::BackgroundColorRole

过时的角色,应该使用BackgroundRole

--

Qt::ForegroundRole

显示DisplayRole对应数据子项时所用的背景刷子

QBrush

Qt::TextColorRole

过时的角色,应该使用ForegroundRole

--

Qt::CheckStateRole

一个数据项的复选状态

Qt::CheckState

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇第13章 Model/View框架 下一篇13.2 模型(Models)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: