常见的视图便捷类:
- QListWidget 列表
- QTableWidget 表格
- QTreeWidget 树
列表便捷类:QListWidget (继承自QListView)
构造函数:
常用函数:
addItem() | 添加项目 |
addItems() | 添加多个项目 |
count() | 项目的数量 |
currentItem() | 返回当前的项目 |
currentRow() | 保存当前项目的行 |
editItem() | 编辑该项目 |
findItems() | 查找项目 |
item() | 返回该行的项目 |
itemAt() | 返回指定坐标的项目 |
itemWidget() | 返回指定项的控件 |
openPersistentEdior() | 开启该项的编辑器 |
closePersitentEdior() | 关闭该项的编辑器 |
removeItemWidget() | 删除该项目的控件 |
row() | 返回该行的项目 |
selectedItems() | 返回该列表的所有项目 |
setCurrentItem() | 设置默认项 |
setCurrentRow() | 设置默认行 |
setItemWidget() | 设置项目控件 |
setSelectionModel() | 设置选择模式 |
sortItems() | 对项目排序 |
takeItem() | 从列表小部件中的给定行中删除并返回项目;从列表小部件中删除的项目将不受Qt管理,需要手动删除 |
clear() | 清空所有项 |
排序方式:
Qt::AscendingOrder | 项目按升序排序 |
Qt::DescendingOrder | 项目按降序排序 |
QListWidget *listwidget=new QListWidget(this);//创建一个列表控件
//添加单个项
listwidget->addItem("1");
//添加多个项
QStringList list;
list<<"2"<<"3"<<"4";
listwidget->addItems(list);
//添加控件
QPushButton *push=new QPushButton("点击");
listwidget->setItemWidget(listwidget->item(0),push);//第一个项目添加一个控件
//设置默认项
listwidget->setCurrentItem(listwidget->item(2));//设置第3个项目为默认项
//设置默认行
listwidget->setCurrentRow(3);//设置第4行为默认行
//删除并获取项目控件
QListWidgetItem *button=listwidget->takeItem(0);//删除并获取第一个项目控件
//只删除项目控件
listwidget->removeItemWidget(listwidget->item(1));//删除第一个项目
//开启编辑
listwidget->openPersistentEditor(listwidget->item(2));
//排序
listwidget->sortItems(Qt::AscendingOrder);//升序
listwidget->sortItems(Qt::DescendingOrder);//降序
最后运行结果:
树便捷类:QTreeWidget(继承自QTreeView)
构造函数:
常用函数:
closePersistentEditor() | 关闭编辑 |
openPersistentEditor() | 开启编辑 |
addTopLevelItem() addTopLevelItems() | 添加顶级项目 |
columnCount() | 显示列数 |
currentColumn() | 返回当前列 |
currentItem() | 默认项目 |
editItem() | 编辑项目 |
findItems() | 查找项目 |
indexOfTopLevelItem() | 返回给定顶级项的索引 |
insertToplevelItem() insertToplevelItems() | 插入顶级项 |
itemAbove() | 返回该项的上方的项目 |
itemBelow() | 返回项目下方的项目 |
itemAt() | 获取坐标处的项 |
itemWidget() | 返回项目的控件 |
reomoveItemWidget() | 删除项目的控件 |
selectionItems() | 获取控件全部的项目 |
setColumnCount() | 设置列显示的列数 |
setCurrentItem() | 设置默认项 |
setHeaderItem() | 设置标题项 |
setHeaderLabel() | 设置标签 |
setHeaderLabels() | 设置多个标签 |
setItemWidget() | 设置项目控件 |
sortColiumn() | 返回用于排序的列 |
sortItems() | 给定列进行排序 |
takeTopLevelItem() | 删除并获取顶部项 |
插入子项:
对QtreeWidgetItem使用以下函数
- insertChild()设置子项
- praent()获取父项
简单的用法:
QTreeWidget *treewidget=new QTreeWidget(this);//创建一个树控件
treewidget->setFixedSize(500,500);//设置控件大小
//设置列数和标签
treewidget->setColumnCount(5);
QStringList list;
list<<"A"<<"B"<<"c"<<"D"<<"E";
treewidget->setHeaderLabels(list);
//添加项目一
QTreeWidgetItem *item=new QTreeWidgetItem(treewidget);
item->setText(0,"11111");
//添加子项
QTreeWidgetItem *childitem=new QTreeWidgetItem(item);
childitem->setText(0,"00000");//设置内容
childitem->setText(1,"11111");
childitem->setText(2,"22222");
//添加项目二
QTreeWidgetItem *item2=new QTreeWidgetItem(treewidget);
item2->setText(0,"AAAAA");
//添加子项
QTreeWidgetItem *childitem2=new QTreeWidgetItem(item2);
childitem2->setText(0,"BBBBB");//设置内容
childitem2->setText(1,"CCCCC");
childitem2->setText(2,"DDDDD");
//删除项
treewidget->takeTopLevelItem(0);//删除第一个项
树控件更复杂的使用可点击该链接:QTreeWidget_旷工锁的博客-CSDN博客_setheaderlabels
表格控件:QTableWidget(继承自QTableView)
表小部件为应用程序提供标准的表格显示工具。QTableWidget 中的项目由 QTableWidgetItem 提供 。
构造函数:
常用函数:
cellWidget() | 获取给定位置的小组件 |
openPersistentEditor() | 开启编辑器 |
closePersistentEditor() | 关闭编辑器 |
column() | 获取项的列 |
row() | 返回项的行 |
columnCount() | 返回列数 |
rowCount() | 返回行数 |
currentColumn() | 返回当前的列 |
currentRow() | 返回当前的行 |
currentItem() | 返回当前的项 |
findItems() | 查找项 |
item() | 返回指定位置的项 |
itemAt() | 返回指定位置的项的指针 |
removeCellWidget() | 移除指定位置的项控件 |
selectedItems() | 获取全部项 |
selectedRanges() | 获取选中区域的项 |
setCellWidget() | 设置指定位置项的控件 |
setColumnCount() | 设置列数 |
setCurrentItem() | 设置默认项 |
setHorizontalHeaderItem() | 设置水平标题项 |
setVerticalHeaderitem() | 设置垂直标题项 |
setHorizontalHeaderLabel() | 设置水平标题标签 |
setVerticalHeaderLabel() | 设置垂直标题标签 |
setRowCount() | 设置行数 |
sortItems() | 排序 |
takeItem() | 删除项 |
takeHorizontalItem() | 删除水平标题项 |
takeVerticalHeaderItem() | 删除垂直标题项 |
列举少量函数的使用:
QTableWidget *table=new QTableWidget(5,5,this);//创建一个5行5列的表格
//等价于
//QTableWidget* table= new QTableWidget(this);
//table->setRowCount(5);//设置行数
//table->setColumnCount(5);//设置列数
table->setFixedSize(700,700);//设置大小
//添加水平标题项
QTableWidgetItem *item1=new QTableWidgetItem;
item1->setText("A");
table->setHorizontalHeaderItem(0,item1);//设置水平标题项
//添加竖直标题项
QTableWidgetItem *item2=new QTableWidgetItem;
item2->setText("BBBBB");
table->setVerticalHeaderItem(0,item2);//设置竖直标题项
//添加项
int number=0;
for(int i=0;i<table->rowCount();i++)
{
for(int j=0;j<table->columnCount();j++)
{
QTableWidgetItem *item=new QTableWidgetItem;
item->setText(QString("%1").arg(number++));
table->setItem(i,j,item);
}
}
//设置默认项
table->setCurrentItem(table->item(2,2));//设置坐标为2,2的为默认项
//开启编辑
table->openPersistentEditor(table->item(2,2));//开启坐标2,2的编辑器
设置项目视图的拖放
对QListWidget、QTreeWidget、QTableWidget 的视图进行拖放:
- 启动项目拖动,将dragEnabled属性设置为true
- 允许用户在视图中放置内部或外部项,请将视图的viewport() 的 accptDrops 属性设置为 。true
- 若要向用户显示当前正在拖动的项在放置时将放置的位置,请设置视图的 showDropIndicatorShown属性设置为true。这为用户提供了有关视图中项目放置的持续更新信息。
实现拖动项目(用拖动的项目取代所放下位置的项目)
table->setSelectionMode(QAbstractItemView::SingleSelection);//当用户选择某个项目时,任何已选择的项目都将变为未选中状态
table->setDragEnabled(true);//开启项目拖动
table->viewport()->setAcceptDrops(true);//允许用户在视图中放置内部或外部项
table->setDropIndicatorShown(true);
初始状态:
将11拖动到12的位置:
再添加以下代码实现,拖动项目位置置空,拖动项目取代放下位置的项目
table->setDragDropMode(QAbstractItemView::InternalMove);
初始状态:
将11拖动到12的位置:
也可以对模型/视图类实现拖动:(QListView、QTreeView、QTableView)
设置拖放视图遵循与便利视图相同的模式。
QListView *listView = new QListView(this);
listView->setSelectionMode(QAbstractItemView::ExtendedSelection);
listView->setDragEnabled(true);
listView->setAcceptDrops(true);
listView->setDropIndicatorShown(true);
但对于视图显示的数据的访问是由模型控制因此使用的模型还必须提供对拖放操作的支持。可以通过重新实现 QAbstractItemModel::supportDropActions() 函数来指定模型支持的操作。
Qt::DropActions
Qt::CopyAction | 将数据复制到目标 |
Qt::MoveAction | 将数据从源移动到目标 |
Qt::LinkAction | 创建从源到目标的链接 |
Qt::ActionMask | |
Qt::IgnoreAction | 不对数据执行任何操作 |
Qt::TargetMoveAction | 在Windows上,当目标应用程序应接管D&D数据的所有权时,使用此值,即源应用程序不应删除数据。在 X11 上,此值用于执行移动。TargetMoveAction 未在 Mac 上使用。 |
Qt::DropActions DragDropListModel::supportedDropActions() const
{
return Qt::CopyAction | Qt::MoveAction;
}