0

少し質問があります。

シンプルなテキスト項目、行選択、および QSortFilterProxyModel モデルで QTableView を使用しています。私はこれを再実装しました:

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

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

たとえば、私のテーブルには数字が含まれていて、3 つの行があります。フィルターに任意の値を設定する場合 (ポップアップ ボックス fe)、この番号の行のみをテーブルに表示したい:

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;
}
4

1 に答える 1

0

あなたのfilter()方法は

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

アイテムが選択されていない場合ですQComboBox::currentIndex()-1

于 2013-10-21T16:20:02.670 に答える