[Qt-interest] Tree Item view Highlighter

Sajjad dosto.walla at gmail.com
Mon Jan 10 15:26:54 CET 2011


Hello,

I am back to the same thread after quite a while. I am kind of confused
about accessing the topLeft and bottomRight.

I am doing it as follows:


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

  void H3DNodeListWidget::highlightRegExpChanged()

{

    QRegExp regExp(m_nodeHighlightingEditor->text(),Qt::CaseInsensitive,QRegExp::FixedString);

     m_highlightModel->setFilterRegExp(regExp);

     const QModelIndex topLeft = m_highlightModel->index(0,0,QModelIndex());

    const QModelIndex bottomRight =
m_highlightModel->index(0,m_highlightModel->columnCount()-1,QModelIndex());


    emit proxyModelHighlightChanged(topLeft,bottomRight);


}



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


And in the constructor of the same class i am connecting one signal to
another signal as follows:

      connect(this,SIGNAL(proxyModelHighlightChanged(QModelIndex,QModelIndex)),m_highlightModel,SIGNAL(dataChanged(QModelIndex,QModelIndex)));



I think i am doing something wrong in accessing the topLeft and
bottomRight model index.



Any further hint on it?



Regards

Sajjad


On Tue, Jan 4, 2011 at 8:56 PM, Scott Aron Bloom
<Scott.Bloom at onshorecs.com>wrote:

> Yes…
>
>
>
> *From:* qt-interest-bounces+scott.bloom=onshorecs.com at qt.nokia.com[mailto:
> qt-interest-bounces+scott.bloom <qt-interest-bounces%2Bscott.bloom>=
> onshorecs.com at qt.nokia.com] *On Behalf Of *Sajjad
> *Sent:* Tuesday, January 04, 2011 11:50 AM
> *To:* qt-interest at trolltech.com
> *Subject:* Re: [Qt-interest] Tree Item view Highlighter
>
>
>
> Hello Andre,
>
>
>
> I think inside the slot i shall have to emit the dataChanged() as follows:
>
>
>
> ///////////////////////////////////////////////////////////////////
>
>
>
> void H3DNodeListWidget::highlightRegExpChanged()
>
> {
>
>     QRegExp regExp(m_nodeHighlightingEditor->text(),Qt::CaseInsensitive,QRegExp::FixedString);
>
>     m_highlightModel->setFilterRegExp(regExp);
>
>
>
>
>
>     //in that case i have to send the QModleIndex parameters
>
>
>
>     //to specify the range and how do i retrieve this
>
>     emit m_highlightModel->dataChanged(m_modelIndexStart,m_modelIndexEnd);
>
> }
>
>
>
>
>
> ///////////////////////////////////////////////////////////////////
>
>
>
>
>
> Am i in the right track?
>
>
>
>
>
>
>
> Regards
>
> Sajjad
>
> On Tue, Jan 4, 2011 at 8:34 PM, André Somers <andre at familiesomers.nl>
> wrote:
>
>
>
> Verstuurd vanaf mijn iPhone
>
>
> Op 4 jan. 2011 om 19:51 heeft Sajjad <dosto.walla at gmail.com> het volgende
> geschreven:
>
> Hello
>
>
>
> emitting the dataChanged() is done only when we re-implement the setData()
> function. Should i over-ride data() or the setData() function?
>
> No, emitting dataChanged is done when data in the model changes. That
> happens often when setData is called, but that is not the only thing that
> can trigger it. In this case, changing your regexp changes the data. So, you
> override data() as explained earlier, and you emit dataChanged when the
> regexp changes.
>
>
>
> André
>
>
>
>
>
>
>
>
>
> Regards
>
> Sajjad
>
> On Tue, Jan 4, 2011 at 6:53 PM, Scott Aron Bloom <
> Scott.Bloom at onshorecs.com> wrote:
>
> On Tue, Jan 4, 2011 at 10:21 AM, Andre Somers <andre at familiesomers.nl>
> wrote:
>
> Op Di, 4 januari, 2011 9:21 am, schreef Sajjad:
>
>
> >>  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.
> >>
> >> Ah, of course... Sorry about that.
> >>
> >> First of all: are you getting an effect if you set a fixed regexp to
> >> begin
> >> with? If not, then something is wrong in the code above. Set a
> >> breakpoint
> >> where you return the color and see if you ever arrive there at all...
> >>
> >
> > I set the breakpoint at the slot
> >
> >   void H3DNodeListWidget::highlightRegExpChanged()
> >
> > {
> >
> >     QRegExp
> >
> regExp(m_nodeHighlightingEditor->text(),Qt::CaseInsensitive,QRegExp::FixedString);
> >
> >      m_highlightModel->setFilterRegExp(regExp);
> >
> > }
> >
>
> I meant setting the breakpoint in the data() function.
>
>
>
> The breakpoint  has been set there as well.
>
>
> > And i did not reach  the data() function while stepping into the code.
>
> I can imagine it did not.
>
>
> >> However, I think the problem is, that you need to notify your view that
> >> the
> >> data has changed if your regexp changes. For testing, just emit reset(),
> >> but
> >> in your real implementation, you should probably be a bit nicer and emit
> >> dataChanged() with the right modelindexes.
> >>
>
> i believ ethat the dataChanged() signal two model indexes as input
> parameter. I need to highlight only one tree item that maches the expression
> in the line edit. In that case how should i set the value for the signal
> that takes 2 input parameters. Should it be the same source index specified
> twice? I tried something 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()))
>
>         {
>
>
>
>             //the following statement gives error because the virtual function itself
>
>
>
>             //declared const
>
>             emit dataChanged(sourceIndex,sourceIndex);
>
>             return Qt::cyan;
>
>         }
>
>         else
>
>         {
>
>             //return the default background color
>
>             //whatever may it be
>
>             return QVariant();
>
>         }
>
>     }
>
>     else
>
>     {
>
>         return sourceIndex.data(role);
>
>     }
>
> }
>
>
>
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>
>
>
>
>
> And then if i have to set the connection as follows, i believe that it will
> not be valid:
>
>
>
>
> connect(m_proxyMode,dataChanged(QModelIndex,QModelIndex),m_treeView,SLOT(update(QModelIndex))));
>
>
>
> As you can see that the parameters are not matching.
>
>
>
> From all  the discussions you can imagine that i am having trouble to grasp
> the basic idea of model.view programming.
>
> Could you provide some references where these issues are well discussed?
>
>
>
>
>
> Regards
>
> Sajjad
>
> -----------------------
>
>
>
>
>
> Yes, read the Qt documentation on model view programming…  and the
> signal/slot programming…
>
>
>
> The dataChanged signal, allows you to send out a “square” of topLeft to
> bottomRight inclusive…  If topLeft == bottomRight, then only that cell is
> updated.
>
>
>
> As to your update connection, you shouldn’t have to, all views are
> automatically connected to the dataChanged signal
>
>
>
> Scott
>
>
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at qt.nokia.com
> http://lists.qt.nokia.com/mailman/listinfo/qt-interest
>
>
>
> _______________________________________________
> 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/20110110/32ee0314/attachment.html 


More information about the Qt-interest-old mailing list