[Qt-interest] Tree Item view Highlighter

Sajjad dosto.walla at gmail.com
Tue Jan 4 08:23:08 CET 2011


On Tue, Jan 4, 2011 at 7:43 AM, Andre Somers <andre at familiesomers.nl> wrote:

>  Op 3-1-2011 23:29, Sajjad schreef:
>
> Hello forum,
>
>
>  The following topic is the follow-up which has been discussed several
> days ago.
>
> It would have been better to continue the discussion in that tread then.
>

Sorry for the discontinuity.

>
>  I want to highlight a particular tree item based on pattern matching. In
>  that case i have sub-classed the QSortFilterProxyModel and over-ridden the
> following function
>
>
>
> //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>
> bool H3DHighlighterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
>
> {
>
>     std::cout << "In the filtration" << std::endl;
>
>     QColor highLighter = Qt::cyan;
>
>     QColor noHighLighter = Qt::white;
>
>     if(sourceModel()->data(source_parent).toString().contains(filterRegExp()))
>
>     {
>
>         std::cout << "Will be highlighted" << std::endl;
>
>         sourceModel()->setData(source_parent,QVariant(highLighter),Qt::BackgroundRole);
>
>     }
>
>     else
>
>     {
>
>         std::cout << "Will not be highlighted" << std::endl;
>
>         sourceModel()->setData(source_parent,QVariant(noHighLighter),Qt::BackgroundRole);
>
>     }
>
>     return true;
>
> }
>
>
>
>
>
> ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>
>
>  But i am not getting any high-lighting effect with the textChanged signal
> in the line edit . The appropriate slot has been connected as follows:
>
>
>
>
> //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>
>    void H3DNodeListWidget::highlightRegExpChanged()
>
> {
>
>     QRegExp regExp(m_nodeHighlightingEditor->text(),Qt::CaseInsensitive);
>
>     m_highlightModel->setFilterRegExp(regExp);
>
> }
>
>
>
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>
>
>  If there is anything missing in the process or logical mistake, please
> mark it out for me that i am missing.
>
>  Yes. Don't reimplement filterAcceptsRow, just let it return true (it does
> that by default, I think). Instead, reimplement the data() function, and
> _return_ the color you want for the rows that you want to highlight when the
> background role is queried. Otherwise, return whatever data the source model
> provides you. Something like this:
>
> QVariant H3DHighlighterProxyModel::data(const QModelIndex &index, int role) const
>
> {
>
> 	QModelIndex sourceIndex = mapToSource(index); //get a handle on the underlying data
> 	if (!sourceIndex.isValid())
> 		return QVariant();
>
> 	if (role == Qt::Background) {
> 		if (//needs to be highlighted) {
> 			return Qt::cyan;
> 		} else {
> 			return QVariant(); //use the default background color, whatever that may be
> 		}
> 	} else {
> 		return sourceIndex.data(role);
> 	}
> }
>
>
According to the suggestion the id as follows:

///////////////////////////////////////////////////////////////////////////////////////////////////////

QVariant H3DHighlighterProxyModel::data(const QModelIndex &index, int
role) const

{

    //get  the handle to  the underlyiing data

    QModelIndex  sourceIndex = mapToSource(index);

     if(!sourceIndex.isValid())

    {

        return QVariant();

    }

     if(role == Qt::BackgroundRole)

    {

        if(sourceModel()->data(sourceIndex).toString().contains(filterRegExp()))

        {

            return Qt::cyan;

        }

        else

        {

            //return the default background color

            //whatever may it be

            return QVariant();

        }

    }

    else

    {

        return sourceIndex.data(role);

    }

}



////////////////////////////////////////////////////////////////////////////////////////////////////////

Is there anything missing up there? I removed the other function that i
over-rid mentioned in the previous post.

I am still not getting any effect. The textchanged() signal is connected to
 the slot as before.


Thanks
Sajjad

>
>
>
> André
>
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at qt.nokia.com
> http://lists.qt.nokia.com/mailman/listinfo/qt-interest
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20110104/a3ddb3ab/attachment.html 


More information about the Qt-interest-old mailing list