Linux qt create tablewidget 添加menu过滤 多选
时间: 2024-02-20 14:00:00 浏览: 80
tablewidget筛选
5星 · 资源好评率100%
要实现多选菜单过滤功能,您可以对前面提到的示例代码进行一些修改。以下是一个示例代码,演示如何创建一个带有多选菜单过滤功能的 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);
} else {
tableWidget->showRow(row);
}
}
}
});
```
此代码与前面的示例代码几乎相同,只是在过滤数据时添加了一个循环来显示选定的行。当用户单击“Filter”菜单项时,将获取选定的行并过滤数据,以仅显示选定的行。
阅读全文