少し質問があります。
シンプルなテキスト項目、行選択、および 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;
}