Qt 5.3.1引入了QSqlTableModel和QSortFilterProxyModel的问题

时间:2014-09-17 19:32:38

标签: qt qsqltablemodel qsortfilterproxymodel qt5.3

我正在使用QSortFilterProxyModel来处理很多数据模型,它运行良好。从Qt5.3.0更新到Qt5.3.1后,部分改变了。

我的一个GUI面板使用连接到QSortTableModel的QTortFilterProxyModel连接的QTreeView。 SQL模型被分配给具有大约60000行和6个公共列的数据库表。

使用Qt5.3.0数据加载很简单......它需要几秒钟来加载数据(使用任务管理器作为网络流量监视器),另一秒钟需要在QTreeView中显示数据。

使用Qt5.3.1变得很痛苦......它仍然需要几秒钟才能加载数据但是它会在数据最终出现在视图中之前将整个CPU核心阻塞多分钟(使应用程序无响应)。

使用具有相似行数的自定义模型(从抽象表模型派生)不会出现此问题。

我也尝试使用普通的QSqlTableModel和默认构造的QSortFilterProxyModel(这意味着根本不会进行过滤)...仍然需要多长时间加载。这是我使用的代码:

sqlTableModel = new QSqlTableModel(nullptr, QSqlDatabase::database(connectionName));

proxyModel = new QSortFilterProxyModel();
proxyModel->setSourceModel(sqlTableModel);

tableView = new QTableView();
tableView->setSortingEnabled(true);
tableView->setModel(proxyModel);

sqlTableModel->database().open();
sqlTableModel->setTable("table_name");
sqlTableModel->select();

我找到了两个解决方法。但是,它们不够强大,无法使用代理模型执行我目前所做的事情:

  1. 使用QSqlTableModel排序和过滤(基于WHERE和ORDER BY)。
  2. setSortingEnabled(false);
  3. 禁用排序

    有人知道这个问题吗?有更好的解决方法吗?

0 个答案:

没有答案