【问题标题】:Sort with proxy model使用代理模型排序
【发布时间】:2013-10-21 09:35:08
【问题描述】:

我有一个小问题。

我正在使用带有简单文本项、行选择和 QSortFilterProxyModel 模型的 QTableView。 我重新实现了这个:

void MyTableView::setModel(QAbstractItemModel *model)
{
  assert(model);

  m_proxyModel->setSourceModel(model);
  QTableView::setModel(m_proxyModel);
}

例如,我的表包含数字,它有 3 行。如果我要为我的过滤器设置任何值(在弹出框 f.e. 中),我想在我的表格中只显示这个数字的行:

1 2 3

4 5 6

7 8 9

设定值:5

4 5 6

我试过这个:

m_proxyModel->setFilterRegExp("5");
m_proxyModel->setFilterKeyColumn(column); //column = 1 for my example

但没有任何改变。所以帮助我,我必须如何正确使用这个代理模型?

对不起,我的英语不好。

编辑:

void MyTableView::editFilterPattern(int column)
{ 
    QStringList patterns; 
    for (int row = 0; row < model()->rowCount(QModelIndex()); ++row)
        patterns.push_back(model()->data(model()->index(row, column)).toString());
    m_filterEditor->setFilterPatterns(patterns);
    if(m_filterEditor->exec() == QDialog::Accepted)
    {
        if(!m_filterEditor->filter())
        {
            m_proxyModel->setFilterRegExp(QString());
            return; 
        }
        m_proxyModel->setFilterRegExp(m_filterEditor->getCurrentFilterPattern());
        m_proxyModel->setFilterKeyColumn(column); 
    }
}

CMyTableFilterEditor::CMyTableFilterEditor(QWidget *parent) :
  QDialog(parent), m_ui(new Ui::CFilterEditor())
{
  m_ui->setupUi(this);

  connect(m_ui->m_buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
  connect(m_ui->m_buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
}

void CMyTableFilterEditor::setFilterPatterns(const QStringList& patterns)
{
  clearFilterPatterns();
  m_ui->m_comboFilters->addItems(patterns);
}

void CMyTableFilterEditor::clearFilterPatterns()
{
  m_ui->m_comboFilters->clear();
  m_ui->m_comboFilters->addItem(tr("(All)"));
}

QString CMyTableFilterEditor::getCurrentFilterPattern() const
{
  return m_ui->m_comboFilters->currentText();
}

bool CMyTableFilterEditor::filter() const
{
  return m_ui->m_comboFilters->currentIndex() != 0;
}

【问题讨论】:

  • 您应该将代理模型设置为您的视图 - setModel(m_proxyModel);
  • 已修复,但没有任何改变。如果我将任何 qstring 设置为 filterregexp,它将始终清除我的表。
  • 你应该提供一个充分展示你的问题的例子。
  • 大声笑..问题是 m_filterEditor->getCurrentFilterPattern() 返回空 QString o.O 很奇怪..

标签: qt filtering qtableview qregexp qsortfilterproxymodel


【解决方案1】:

您的filter() 方法必须是

bool CMyTableFilterEditor::filter() const
{
  return m_ui->m_comboFilters->currentIndex() != -1;
}

因为如果没有选择任何项目,QComboBox::currentIndex() 就是 -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    相关资源
    最近更新 更多