首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QSqlTableModel的QSortFilterProxyModel

使用QSqlTableModel的QSortFilterProxyModel
EN

Stack Overflow用户
提问于 2011-10-07 01:53:08
回答 1查看 2.3K关注 0票数 1

我正在试用qt助手中的基本QSortFilterProxyModel示例,并制作了一个QSqlTableModel来尝试,我制作的filter.The示例没有过滤,因为它应该是,我需要帮助来了解为什么。

代码语言:javascript
复制
/*
ned.h
*/
#ifndef NED_H
#define NED_H

#include <QWidget>
#include <QtSql>
#include "ui_ned.h"

class QSortFilterProxyModel;

class ned : public QWidget
{
    Q_OBJECT

public:
    ned(QWidget *parent = 0);

private:
    void setupModel();
    QSortFilterProxyModel *proxyModel;
    QSqlTableModel *tableModel;
    Ui::ned ui;

private slots:
    void filterRegExpChanged();
};

#endif // NED_H
.................................................................
.................................................................
/*
ned.cpp
*/

#include <QtGui>
#include <QtSql>
#include <QwwClearLineEdit>
#include "ned.h"

ned::ned(QWidget *parent) :
    QWidget(parent)
{
    ui.setupUi(this);
    setupModel();

    tableModel = new QSqlTableModel(ui.tableView);
    tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
    tableModel->setTable("tables");

    ui.tableView->setModel(tableModel);

    ui.tableView->setColumnHidden(tableModel->fieldIndex("id"), true);

    ui.tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    ui.tableView->setSelectionMode(QAbstractItemView::SingleSelection);
    ui.tableView->setAlternatingRowColors(true);
    ui.tableView->setSortingEnabled(true);

    ui.tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui.tableView->horizontalHeader()->setStretchLastSection(true);

    proxyModel = new QSortFilterProxyModel;
    proxyModel->setDynamicSortFilter(true);
    proxyModel->setSourceModel(tableModel);
    proxyModel->setFilterKeyColumn(1);

    tableModel->select();
    //Locale
    tableModel->setHeaderData(1, Qt::Horizontal, tr("Table Name"));
    tableModel->setHeaderData(2, Qt::Horizontal, tr("Table Description"));


    connect(ui.nedsort, SIGNAL(textChanged(QString)),
            this, SLOT(filterRegExpChanged()),Qt::UniqueConnection);

}

void ned::setupModel()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("smith.DAT");
    if (!db.open())
    {
        QMessageBox::critical(0, tr("Cannot open database"),
                              tr("Unable to establish a database connection.\n"
                                 "This example needs SQLite support. Please read "
                                 "the Qt SQL driver documentation for information how "
                                 "to build it."), QMessageBox::Cancel);
        return;
    }
}


void ned::filterRegExpChanged()
{
    QRegExp regExp(ui.nedsort->text());
    proxyModel->setFilterRegExp(regExp);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-07 03:07:14

这一行是错误的:

代码语言:javascript
复制
 ui.tableView->setModel(tableModel);

您必须将模型设置为proymodel (稍后):

代码语言:javascript
复制
 ui.tableView->setModel(proxyModel);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7678435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档