13.7.1 QListWidget(2)
设置对应的编码方案,然后在行②~③的几行中调用QObject::tr()函数,将本例中的字符串转换为Unicode编码的字符串。在这几行中,角色DisplayRole对应着数据项的文字,DecorationRole对应着数据项的图标,TextAlignmentRole对应着数据项文字的对齐方式,ToolTipRole对应着鼠标停留在数据项区域中时所要显示的文字信息。而角色UserRole对应的数据子项却是由应用程序自行决定的,本例利用这个数据子项来存放英文版的新闻文字。
代码段13 31,设置QListWidgetItem所表示数据项中的数据子项,取自z:\examples\mvc\item_roles\NewsDialog.cpp
- NewsDialog::NewsDialog()
- {
- listWidget = new QListWidget(this); ①
- listWidget->setViewMode(QListView::IconMode);
- listWidget->setIconSize(QSize(120, 80));
- listWidget->setMovement(QListView::Static);
- listWidget->setFixedWidth(340);
- listWidget->setSpacing(12);
-
- for ( int i=0; i<10; i++) {
- News_Info news = news_2011 [i];
- QListWidgetItem * item = new QListWidgetItem(listWidget); ②
- item->setData(Qt::DisplayRole, QObject::tr(news.news_title) );
- item->setData(Qt::DecorationRole, QIcon(news.image_filename) );
- item->setData(Qt::TextAlignmentRole,Qt::AlignHCenter );
- item->setData(Qt::ToolTipRole, QString( QObject::tr(news. news_in_Chinese)) );
- item->setData(Qt::UserRole, QString( news.news_in_English) );③
- }
- connect(listWidget, ④
- SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
- this, SLOT(changeNews(QListWidgetItem *, QListWidgetItem*)));
- image = new QLabel(this);
- newnews = new QLabel(this);
- ……
- }
- void NewsDialog::changeNews(QListWidgetItem *current, QListWidgetItem *previous) ⑤
- {
- int row = listWidget->row( current );
- image->setPixmap( QPixmap( news_2011[row].image_filename ) );
- news->setText( current->data(Qt::UserRole).toString() ); ⑥
- }
行④将使得用户单击列表中某个数据项时,调用类NewsDialog的槽函数changeNews(行⑤),该函数的参数current表示用户单击的数据项,而previous表示单击之前的当前数据项。行⑥读取数据项中角色UserRole对应的数据子项,也就是此前写入的英文版新闻文字,显示在界面右下角的QLabel对象中。
类QTableWidget在其内部定义了一个具有表格结构的模型,并能够以表格的样子显示这个模型。表格中的每个数据项被表示为类QTableWidgetItem的对象。在表格视图中所要显示的数据被存放在每个数据项的角色DisplayRole对应的数据子项中。这个数据子项的类型为QVariant,其中可以存放类型为QString的字符串,也可以存放类型为int或者double的数值。我们可以调用该类的成员函数setData(),将所要显示的数据写入角色DisplayRole对应的数据子项中。类QTableWidget的成员函数setItem()可以将一个数据项设定到指定的行、列。
为了更加方便地控制数据项的外观,QTableWidgetItem提供了一组函数,用于设置数据项的背景、字体、文字对齐方式等与外观相关的属性。这些函数实际上调用了该类的成员函数setData(),通过修改数据项中各个数据子项的值,来影响数据项的外观。
我们举一个例子来演示QTableWidget的功能。这个例子的输出如图13 25所示,表格中的每一行显示一个国家的名称、这个国家2010年GDP总量值(单位为万亿美元),这个国家2010年的总人口(单位为亿),这个国家2010年人均GDP(单位为万美元/每人)。
|
| 图13 25 使用QTableWidget显示一个表格 |