QSortFilterProxyModel filter whole word.



  • For my tableView I am using a QSortFilterModel to which a QRegExp is set

    @QRegExp exp;
    if (isWholeWord) // checkbox for whole words
    exp.setPattern(QString("^%1$").arg(text));
    else
    exp.setPattern(text);

    exp.setPatternSyntax(QRegExp::FixedString);
    
    exp.setCaseSensitivity(isCaseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive);
    
    m_proxyModel->setFilterRegExp(exp);@
    

    As per the documentation of "QRegExp":http://qt-project.org/doc/qt-5.0/qtcore/qregexp.html it should work , i tried with exp.indexIn(text) and it return 0 but the model does not show anything.

    what am I missing ?


  • Moderators

    since you set the pattern syntax to QRegExp::FixedString it actually tries to find "^bla$".
    I think you only want this for your else-case.



  • Thank you, works perfect !!!

    Regards
    Sam



  • Hi,

    The above implementation worked very well, Since I am using the filterModel on my tableView the regExp is set for the whole cell, this mean if the filter text is "abc" and isWholeWord is true then its filters all the rows that has exact "abc" set for the complete cell.

    What I want is it should check if the cell contains the filter text

    Eg: Filter Text : Dubai isWholeWord: true

    Dubai
    Dubai Uae
    Hello Dubai

    All the rows should be visible that contains Dubai as whole word, how to do that?


  • Moderators

    if i understood you correct, then just leave out the line
    @
    exp.setPatternSyntax(QRegExp::FixedString);
    @


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.