设为首页 加入收藏

TOP

13.7.1 QListWidget(2)
2013-10-07 15:19:19 来源: 作者: 【 】 浏览:66
Tags:13.7.1 QListWidget

13.7.1  QListWidget(2)

设置对应的编码方案,然后在行②~③的几行中调用QObject::tr()函数,将本例中的字符串转换为Unicode编码的字符串。在这几行中,角色DisplayRole对应着数据项的文字,DecorationRole对应着数据项的图标,TextAlignmentRole对应着数据项文字的对齐方式,ToolTipRole对应着鼠标停留在数据项区域中时所要显示的文字信息。而角色UserRole对应的数据子项却是由应用程序自行决定的,本例利用这个数据子项来存放英文版的新闻文字。

代码段13 31,设置QListWidgetItem所表示数据项中的数据子项,取自z:\examples\mvc\item_roles\NewsDialog.cpp

  1. NewsDialog::NewsDialog()  
  2. {  
  3.     listWidget = new QListWidget(this);             ①  
  4.     listWidget->setViewMode(QListView::IconMode);  
  5.     listWidget->setIconSize(QSize(120, 80));  
  6.     listWidget->setMovement(QListView::Static);  
  7.     listWidget->setFixedWidth(340);  
  8.     listWidget->setSpacing(12);  
  9.  
  10.     for ( int i=0; i<10; i++) {  
  11.         News_Info news = news_2011 [i];       
  12.         QListWidgetItem * item = new QListWidgetItem(listWidget); ②  
  13.         item->setData(Qt::DisplayRole,      QObject::tr(news.news_title) );  
  14.         item->setData(Qt::DecorationRole, QIcon(news.image_filename) );  
  15.         item->setData(Qt::TextAlignmentRole,Qt::AlignHCenter );       
  16.         item->setData(Qt::ToolTipRole, QString( QObject::tr(news.           news_in_Chinese)) );  
  17.         item->setData(Qt::UserRole, QString( news.news_in_English) );③  
  18.     }  
  19.     connect(listWidget,         ④  
  20.             SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),  
  21.             this, SLOT(changeNews(QListWidgetItem *, QListWidgetItem*)));  
  22.     image = new QLabel(this);  
  23.     newnews  = new QLabel(this);  
  24.     ……  
  25. }  
  26. void NewsDialog::changeNews(QListWidgetItem *current, QListWidgetItem   *previous)      ⑤  
  27. {  
  28.     int row = listWidget->row( current );  
  29.     image->setPixmap( QPixmap( news_2011[row].image_filename ) );  
  30.     news->setText( current->data(Qt::UserRole).toString() );        ⑥  
  31. }  

行④将使得用户单击列表中某个数据项时,调用类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显示一个表格
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.7.1 QListWidget(3) 下一篇13.7.1 QListWidget(1)

评论

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