目录
一、QTablewidget
在Qt 5.6.3版本中,QTableWidget类是一个继承自QWidget的小部件类,用于显示二维表格数据。它提供了许多公共接口,以便在运行时使用。以下是QTableWidget的所有公有接口及其用途的简要描述:
构造函数
- QTableWidget(QWidget *parent = nullptr):构造一个空的QTableWidget小部件。
- QTableWidget(int rows, int columns, QWidget *parent = nullptr):构造一个具有指定行数和列数的QTableWidget小部件。
数据操作
- setRowCount(int count):设置表格的行数。
- setColumnCount(int count):设置表格的列数。
- setHorizontalHeaderLabels(const QStringList &labels):设置表格的水平表头标签。
- setVerticalHeaderLabels(const QStringList &labels):设置表格的垂直表头标签。
- setItem(int row, int column, QTableWidgetItem *item):在给定的行和列位置设置一个表格项。
- item(int row, int column) const:获取给定位置的表格项。
- takeItem(int row, int column):从给定位置删除表格项,并返回该项。
- clear():清空表格中所有的内容。
数据查询
- rowCount() const:获取表格的行数。
- columnCount() const:获取表格的列数。
- horizontalHeaderItem(int column) const:获取水平表头给定列的表头项。
- verticalHeaderItem(int row) const:获取垂直表头给定行的表头项。
- itemAt(int x, int y) const:获取给定坐标位置的表格项。
- findItems(const QString &text, Qt::MatchFlags flags) const:在表格中查找包含给定文本的所有表格项。
样式和行为
- setEditTriggers(QAbstractItemView::EditTriggers triggers):设置编辑表格时的触发事件。
- setSelectionMode(QAbstractItemView::SelectionMode mode):设置选择模式。
- setAlternatingRowColors(bool enable):设置交替行颜色是否启用。
- setSortingEnabled(bool enable):设置表格是否启用排序。
信号与槽
- cellClicked(int row, int column):当单元格被单击时发出信号。
- cellDoubleClicked(int row, int column):当单元格被双击时发出信号。
- itemSelectionChanged():当选择项发生更改时发出信号。
以上仅是QTableWidget的一些公共接口,还有其他的接口和方法可供使用。可以参考官方文档以获取更详细的信息和用法示例。
1.6 批量添加QTablewidget 的右键菜单
void MyClass::setTable(TableSetting_t &tst)
{
tst.TWidget->setSelectionBehavior (QAbstractItemView::SelectRows);//选中则选中整行
tst.TWidget->setSelectionMode (QAbstractItemView::SingleSelection);/选择模式为单行选择
tst.TWidget->setContextMenuPolicy (Qt::CustomContextMenu);//添加右键菜单策略
auto clearMenu = new QMenu(this);
/*右键菜单*/
connect(tst.TWidget, &QTableWidget::customContextMenuRequested, this, [=](const QPoint &pos){
clearMenu->clear();
clearMenu->addAction(QIcon(":/Icons/clear_symbol.ico"), tr("Clear Screen"), this, [=](){
for (int row = 0; row < tst.TWidget->rowCount(); row++)
{
for (int col = 0; col < tst.TWidget->columnCount(); col++)
{
if (tst.TWidget->item(row, col))
{
tst.TWidget->item(row, col)->setText("");
}
}
}
});
clearMenu->exec(QCursor::pos());
});
}
二、QTableWidgetItem
此枚举描述item的属性
Constant | Value | Description |
---|---|---|
Qt::NoItemFlags | 0 | 不设置任何属性。 |
Qt::ItemIsSelectable | 1 | 是否可选择。 |
Qt::ItemIsEditable | 2 | 是否可编辑。 |
Qt::ItemIsDragEnabled | 4 | 拖拽使能。 |
Qt::ItemIsDropEnabled | 8 | 是否可放置使能。 |
Qt::ItemIsUserCheckable | 16 | 用户可以选中或取消选中它。 |
Qt::ItemIsEnabled | 32 | item是否使能。 |
Qt::ItemIsAutoTristate | 64 | 项目的状态取决于其子项的状态。这样可以自动管理 QTreeWidget 中父项的状态(如果选中所有子项,则选中,如果未选中所有子项,则取消选中,如果仅选中部分子项,则部分选中)。 |
Qt::ItemNeverHasChildren | 128 | 该项永远不会有子项。这仅用于优化目的。 |
Qt::ItemIsUserTristate | 256 | 用户可以循环浏览三种不同的状态。此值是在 Qt 5.5 中添加的。 |
请注意,需要为Checkable item提供一组合适的标志和初始状态,指示项目是否已选中。也就是说,当你需要item显示复选框时,你需要指定它是选中还是未选中状态;
//ui->tableWidget->item(row, col)->setCheckState ( Qt::checked);或者
ui->tableWidget->item(row, col)->setCheckState ( Qt::Unchecked);
请注意,如果索引设置了 Qt::ItemNeverHasChildren 标志,则重新实现 QAbstractItemModel::hasChildren 以返回索引的 true 是未定义的行为。
itemFlags 类型是 QFlags 的 typedef。它存储项目标志值的逻辑或组合。
三、QTreeWidget Class
qtreewiget 添加自定义菜单
3.1 添加菜单
void MyClass::SideBarTreeInit()
{
auto Root = new QTreeWidgetItem(ui->TreeWidget );
ui->TreeWidget ->setContextMenuPolicy (Qt::CustomContextMenu);//添加自定义菜单策略
auto menu1= new QMenu(tr("menu1"),this);//构造右击菜单1
menu1->addAction(QIcon("iconPath1"),tr("actionName1"),this,&MyClass::onSlot1);//将action的触发事件与槽onSlot1绑定
//鼠标右击触发弹出菜单信号
connect (ui->TreeWidget ,&QTreeWidget::customContextMenuRequested,[=](const QPoint &pos){
if(ui->TreeWidget ->itemAt (pos)==nullptr)return;
if(ui->TreeWidget ->itemAt (pos) == Root )
{
menu1->exec(QCursor::pos());//弹出右键菜单,菜单位置为光标位置
}
});
ui->TreeWidget ->expandAll ();//将TreeWidget 的所有item展开
}
3.2 根据文本查找item
auto tops = ui->TreeWidget ->findItems (tr("finad text"),Qt::MatchRecursive);
此枚举描述在模型中搜索项时可以使用的匹配类型。
Constant | Value | Description |
---|---|---|
Qt::MatchExactly | 0 | 执行基于 QVariant 的匹配。 |
Qt::MatchFixedString | 8 | 执行基于字符串的匹配。基于字符串的比较不区分大小写,除非还指定了标志。MatchCaseSensitive |
Qt::MatchContains | 1 | 搜索词包含在项目中。 |
Qt::MatchStartsWith | 2 | 搜索词与项目的开头匹配。 |
Qt::MatchEndsWith | 3 | 搜索词与项目的末尾匹配。 |
Qt::MatchCaseSensitive | 16 | 搜索区分大小写。 |
Qt::MatchRegularExpression | 4 | 使用正则表达式作为搜索词执行基于字符串的匹配。使用 QRegularExpression。使用此标志时,QRegularExpression 对象可以作为参数传递,并将直接用于执行搜索。区分大小写标志将被忽略,因为 QRegularExpression 对象应已完全配置。此枚举值是在 Qt 5.15 中添加的。 |
Qt::MatchWildcard | 5 | 使用带有通配符的字符串作为搜索词执行基于字符串的匹配。 |
Qt::MatchWrap | 32 | 执行环绕搜索,以便当搜索到达模型中的最后一个项目时,它从第一项再次开始并继续,直到检查完所有项目。 |
Qt::MatchRecursive | 64 | 搜索整个层次结构。 |