小工具知识网

当前位置: 首页 > 行业知识 > 【QT】QTableView或QTableWidget 搭配QLineEdit实现数据的搜索显示

行业知识

【QT】QTableView或QTableWidget 搭配QLineEdit实现数据的搜索显示

2026-11-01 14:54:31 来源:互联网转载

在 Qt ��,QTableView 和 QTableWidget 都可以用来实现数据的搜索和显示,但它们的适用场景和实现方式有所不同:

()

QTableView

  1. 适用场景:QTableView 适用于更复杂的场景,尤其是当需要处理大量数据或需要高度定制化的表格时。它是基于模型/视图(Model/View)架构的,这意味着你可以将任何实现了 QAbstractItemModel 接口的模型作为数据源。

  2. 实现搜索显示:

    ()
    • 你可以通过设置一个过滤器模型(例如,QSortFilterProxyModel)来实现搜索功能。
    • 过滤器模型可以放置在实际数据模型和 QTableView 之间。
    • 当用户在搜索框中输入文本时,你可以设置过滤器模型的过滤条件,这样 QTableView 就只显示匹配的行。

QTableWidget

  1. 适用场景:QTableWidget 是 QTableView 的一个子类,提供了一个基于项目的接口,适用于更简单的用例,如处理不大的数据集或不需要自定义模型的场景。

  2. 实现搜索显示:

    • QTableWidget 没有内置的过滤支持,但可以手动实现搜索功能。
    • 实现搜索时,需要遍历所有的行和列,检查每个项目(QTableWidgetItem)是否符合搜索条件。
    • 符合条件的行可以保持可见,不符合条件的行可以通过隐藏来实现过滤效果。

总结

  • 如果需要处理的数据量较大,或者需要高度定制化的表格(例如,不同类型的数据,复杂的渲染逻辑等),QTableView 配合自定义模型和过滤器模型是更合适的选择。
  • 如果你的需求相对简单,数据量不大,QTableWidget 通过手动过滤可能就足够了。

    在任何情况下,实现搜索功能通常涉及到监听搜索框的输入变化(例如使用 QLineEdit),然后根据输入的内容更新表格的显示。在 QTableView 的情况下,这通常意味着设置过滤器模型的过滤规则;而在 QTableWidget 的情况下,则可能需要遍历表格项并手动隐藏或显示行。

    实现

    以下是分别使用 QTableView 与 QTableWidget 实现简单搜索功能的示例代码。

    1. QTableView 示例

    首先,使用 QTableView 配合 QSortFilterProxyModel 实现搜索功能。假设我们有一个简单的模型,例如一个字符串列表。

    #include #include int main(int argc, char *argv[]) {    QApplication app(argc, argv);    // 创建数据模型    QStringListModel model;    model.setStringList(QStringList()         proxyModel.setFilterRegExp(QRegExp(text, Qt::CaseInsensitive, QRegExp::FixedString));    });    // 窗口布局    QVBoxLayout *layout = new QVBoxLayout;    layout-addWidget(&searchBox);    layout-addWidget(&tableView);    // 显示窗口    QWidget window;    window.setLayout(layout);    window.show();    return app.exec();}    QApplication app(argc, argv);    QLineEdit searchBox;    QTableWidget tableWidget(4, 1); // 4行1列    QStringList list = QStringList()         QTableWidgetItem *item = new QTableWidgetItem(list.at(i));        tableWidget.setItem(i, 0, item);    }    QObject::connect(&searchBox, &QLineEdit::textChanged, [&](const QString &text){        for (int i = 0; i 

上一篇:【Linux】Linux安装

下一篇:QQ邮箱SMTP服务详解,轻松掌握邮件发送技巧