Linux qt create tablewidget 添加menu过滤
时间: 2024-02-20 19:59:59 浏览: 145
您可以通过为 QTableWidget 添加一个右键菜单来实现过滤功能。以下是实现这种功能的基本步骤:
1. 为 QTableWidget 添加一个右键菜单。
2. 在菜单中添加一个 QAction,用于触发过滤操作。
3. 当用户单击 QAction 时,获取 QTableWidget 中的数据并进行过滤。
4. 更新 QTableWidget 中的数据,以显示过滤后的结果。
以下是一个示例代码,演示如何创建一个带有菜单过滤功能的 QTableWidget:
```cpp
// 创建 QTableWidget
QTableWidget* tableWidget = new QTableWidget(this);
tableWidget->setRowCount(5);
tableWidget->setColumnCount(3);
// 添加数据
for (int row = 0; row < 5; ++row) {
for (int col = 0; col < 3; ++col) {
QTableWidgetItem* item = new QTableWidgetItem(QString("item %1,%2").arg(row).arg(col));
tableWidget->setItem(row, col, item);
}
}
// 添加右键菜单
tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(tableWidget, &QTableWidget::customContextMenuRequested, this, [=](const QPoint& pos) {
QMenu menu;
QAction* filterAction = menu.addAction("Filter");
QAction* selectedAction = menu.exec(tableWidget->viewport()->mapToGlobal(pos));
if (selectedAction == filterAction) {
// 获取选中行
QList<QTableWidgetItem*> selectedItems = tableWidget->selectedItems();
QList<int> selectedRows;
for (auto item : selectedItems) {
if (!selectedRows.contains(item->row())) {
selectedRows.append(item->row());
}
}
// 过滤数据
for (int row = 0; row < tableWidget->rowCount(); ++row) {
if (!selectedRows.contains(row)) {
tableWidget->hideRow(row);
}
}
}
});
```
此代码将创建一个包含 5 行和 3 列的 QTableWidget,并在单元格中添加一些数据。它还为 QTableWidget 添加了一个右键菜单,其中包含一个名为“Filter”的 QAction。当用户单击“Filter”菜单项时,将获取选中行并过滤数据,以仅显示选定行。
阅读全文