StupidBeauty
Read times:375Posted at:Tue Aug 31 21:09:37 2010 - no title specified

Qt4.6.2文档翻译: 条目视图便利类Item View Convenience Classes

概述

除了那些模型/视图类, Qt 4 也包含提供经典的基于条目的容器部件的标准部件.这些部件的表现与Qt 3 中的条目视图类的表现类似,但是它们 都是被重新编写的,以使用底层的模型/视图框架来提升性能和可维护性.旧的条目视图类仍然可以在兼容库中使用 (查看移植向导以获得更多信息).

基于条目的部件 被赋予了能反映它们的用处的名字: QListWidget 提供一个条目列表, QTreeWidget 显示出一个多级的树形结构,而 QTableWidget 提供一个由单元格组成的表格.每个类 都继承 QAbstractItemView 类的行为,它为条目的选择和表头的管理实现通用的行为.

列表部件

单级的列表一般是使用一个 QListWidget 和一些 QListWidgetItem 来显示的.一个列表部件是以与其它任何部件相同的方式构造的:

QListWidget *listWidget = new QListWidget(this);

列表条目可以在它们构造完的时候直接 被添加到列表中:

new QListWidgetItem(tr("Sycamore"), listWidget);

new QListWidgetItem(tr("Chestnut"), listWidget);

new QListWidgetItem(tr("Mahogany"), listWidget);

它们也可以在不给定父列表部件的情况下构造,再在以后添加到一个列表中:

QListWidgetItem *newItem = new QListWidgetItem;

newItem->setText(itemText);

listWidget->insertItem(row, newItem);

列表中的每个条目可以显示一个字符串文本和一个图标.可以改变用来渲染文本和颜色和字体,以为条目提供一个自定义的外观.操作提示 、状态提示和 “这是什么?”帮助信息都是很容易配置的,以确保这个列表是正确地融合到程序中的

newItem->setToolTip(toolTipText);

newItem->setStatusTip(toolTipText);

newItem->setWhatsThis(whatsThisText);

默认地 ,列表中的条目是按照它们创建的顺序呈现出来的。条目列表可以根据 Qt::SortOrder 中给定的标准来排序 ,以产生一个按顺序或者反序字母顺序排序的条目列表

listWidget->sortItems(Qt::AscendingOrder);

listWidget->sortItems(Qt::DescendingOrder);

树形部件

树形或者层次 型条目列表是由 QTreeWidget QTreeWidgetItem 类提供的。树部件中的每个条目可以拥有它自己的子条目 ,而且可以显示几列的信息 。树部件与其它部件的创建方式是一样的

QTreeWidget *treeWidget = new QTreeWidget(this);

在将条目添加到树部件之前 ,必须设置列数。例如 ,我们可以定义两列,再创建一个表头,来在每一列的顶部提供文本标签:

treeWidget->setColumnCount(2);

QStringList headers;

headers << tr("Subject") << tr("Default");

treeWidget->setHeaderLabels(headers);

为每个区域设置文本标签的最简单方法是提供一个字符串列表 。对于更加复杂的表头 ,你可以构造一个树形条目 ,按照你设想的方式装饰它,再将它作为树部件的表头。

树部件中的顶级条目是以那个树部件作为它们的父部件来构造的 。它们可以按照任意顺序插入 ,或者你可以在构造每个条目的时候指定前一个条目以保证它们是以一个特定的顺序排列的:

QTreeWidgetItem *cities = new QTreeWidgetItem(treeWidget);

cities->setText(0, tr("Cities"));

QTreeWidgetItem *osloItem = new QTreeWidgetItem(cities);

osloItem->setText(0, tr("Oslo"));

osloItem->setText(1, tr("Yes"));

QTreeWidgetItem *planets = new QTreeWidgetItem(treeWidget, cities);

树部件对待顶级条目的方式与对待树中深层次的条目的方式有轻微的不同 。条目可以通过调用树部件的 takeTopLevelItem() 函数来从树的顶层级别去除 ,但是低级别的条目是通过调用它们的父条目的 takeChild() 函数来去除的 。条目是使用函数插入到树的顶级结构里的 。在树中低层的结构里 ,是使用父条目的 insertChild() 函数。

在树中的顶级层次与低级层次之间移动条目是容易的 。我们只需要检查那个条目是不是顶级条目 ,而这个信息是通过每个条目的 parent() 函数提供的。例如 ,我们可以删除树部件中的当前条目,不管它在什么位置:

QTreeWidgetItem *parent = currentItem->parent();

int index;

if (parent) {

index = parent->indexOfChild(treeWidget->currentItem());

delete parent->takeChild(index);

} else {

index = treeWidget->indexOfTopLevelItem(treeWidget->currentItem());

delete treeWidget->takeTopLevelItem(index);

}

在树部件中另外的地条目插入这个条目 ,是按照相同的模式来做的:

QTreeWidgetItem *parent = currentItem->parent();

QTreeWidgetItem *newItem;

if (parent)

newItem = new QTreeWidgetItem(parent, treeWidget->currentItem());

else

newItem = new QTreeWidgetItem(treeWidget, treeWidget->currentItem());

表格部件

类似于那些在电子表格程序中看到的东西的条目表格是用 QTableWidget QTableWidgetItem 构造的 。这些东西提供一个包含了可以在其中使用的表头和条目的可滚动的表格部件

表格可以在指定行数和列数的情况下创建 ,或者这些行和列可以在需要的时候添加到一个没有确定大小的表格中

QTableWidget *tableWidget;

tableWidget = new QTableWidget(12, 3, this);

条目在 被添加到表格中要求的位置之前,是在表格之外构造的:

QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(

pow(row, column+1)));

tableWidget->setItem(row, column, newItem);

水平和竖直的表头可以通过在表格之外构造条目再将它们用作表头来添加

QTableWidgetItem *valuesHeaderItem = new QTableWidgetItem(tr("Values"));

tableWidget->setHorizontalHeaderItem(0, valuesHeaderItem);

注意 :表格中的行号和列号是从0开始的。

共有特性

有一些基于条目的特性 ,是每个便利类都有的,这些特性都可以通过每个类的相同的接口来使用。我们在接下来的小节中使用不同的部件的示例来演示这些 。参看模型 /视图类 列表中的每个部件 ,以具体了解关于每个函数的用法。

隐藏条目

有些时候 在一个条目视图部件里面能够隐藏条目比删除它们要有用。上面所有的部件中的条目可以 被隐藏,并且在以后被再次显示。你可以通过调用isItemHidden()函数来确认一个条目是否 被隐藏,条目可以使用 setItemHidden() 来隐藏

由于这个操作是基于条目的 ,相同的函数可以用于所有的三个便利类

选择

条目 被选中的方式是由部件的选择模式( QAbstractItemView::SelectionMode )来控制的。这个属性控制着用户是可以选择一个还是多个条目 ,以及,在多个条目的选择中,选择是否必须是一个连续范围内的条目 。选择模式在以上所有的部件中 都以相同的方式工作。

单个条目的选择: 在用户需要为一个部件选择 单个条目的地方,默认的 单选 模式是合适的 。在这个模式中 ,当前条目和选中条目是同一个。

多个条目的选择 在这个模式下 ,用户可以在不改变已有选择的情况下切换部件中任意条目的选择状态 ,非常类似非排斥的复选 框可以互不依赖地切换的方式。

扩展的选择 那些经 常要求很多相邻的条目被选中的部件,例如在电子表格中发现的部件,需要扩展选择模式。在这个模式里 ,可以使用鼠标和键盘来选择部件中连续范围的条目。复杂选择,牵涉到部件中很多没有与其它选中条目相邻的条目 ,在修饰 键被使用的情况下也可以被创建。

如果用户在不使用修饰 键的情况下选择一个条目,已有的选择就 被清除。

一个部件中的选中的条目是使用 selectedItems() 函数来读取的 ,它提供一个可以在其上遍历的由对应条目组成的列表 。例如 ,我们可以使用下面的代码来找到一个选中条目的列表中所有的数 值的和:

QList<QTableWidgetItem *> selected = tableWidget->selectedItems();

QTableWidgetItem *item;

int number = 0;

double total = 0;

foreach (item, selected) {

bool ok;

double value = item->text().toDouble(&ok);

if (ok && !item->text().isEmpty()) {

total += value;

number++;

}

}

注意 ,对于单选模式,当前条目会在选择中。在多 选模式和扩展选择模式中,当前条目可能不在选择中 ,这取决于用户形成选择的方式。

搜索

通常 ,无论是一个开发者还是呈现给用户一个服务, 能够在一个条目部件中查找条目是有用的 。所有的三个条目视图便利类 都提供一个共有的函数,使得这种操作尽可能地一致和简单。

条目是依据选中的 Qt::MatchFlags 中的 值指定的标准来针对它们包含的文本内容来被搜索的。我们可以使用 findItems() 函数来获取一个符合条件的条目的列表

QTreeWidgetItem *item;

QList<QTreeWidgetItem *> found = treeWidget->findItems(

itemText, Qt::MatchWildcard);

foreach (item, found) {

treeWidget->setItemSelected(item, true);

// Show the item->text(0) for each item.

}

上面的代码导致树部件中那些包含由查询字符串指定的文本内容的条目 被选中。这种模式也可以在列表和表格部件中使用

Your opinions

Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4