Signals | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes

QClickableLabel Class Reference

A QLabel with multiple hotspots, that can be clicked. More...

#include <qclickablelabel.h>

List of all members.

Signals

void mousePressed (const QString &hotspotName)
void mousePressed (unsigned int hotspotIndex)
void mouseReleased (const QString &hotspotName)
void mouseReleased (unsigned int hotspotIndex)

Public Member Functions

 QClickableLabel (QWidget *parent, Qt::WFlags f=0)
 QClickableLabel (const QString &text, QWidget *parent, Qt::WFlags f=0)
virtual ~QClickableLabel ()
void AddHotspot (const QString &name, const QRect position)
void RemoveHotspot (const QString &name)
void RemoveHotspot (unsigned int hotspotIndex)
void RemoveAllHotspots ()

Protected Types

typedef std::vector< QRect > RectVectorType
typedef std::map< QString,
unsigned int > 
NameToIndexMapType
typedef std::map< unsigned int,
QString > 
IndexToNameMapType

Protected Member Functions

virtual void mousePressEvent (QMouseEvent *e)
virtual void mouseReleaseEvent (QMouseEvent *e)
unsigned int matchingRect (const QPoint &p)
 returns index == m_Hotspots.size() if nothing is hit

Protected Attributes

RectVectorType m_Hotspots
NameToIndexMapType m_HotspotIndexForName
IndexToNameMapType m_HotspotNameForIndex

Detailed Description

A QLabel with multiple hotspots, that can be clicked.

Specially useful in connection with a pixmap. Stretched images should be avoided, because the hotspots will not be adjusted in any way.

Definition at line 36 of file qclickablelabel.h.


Member Typedef Documentation

typedef std::map< unsigned int, QString > QClickableLabel::IndexToNameMapType [protected]

Definition at line 71 of file qclickablelabel.h.

typedef std::map< QString, unsigned int > QClickableLabel::NameToIndexMapType [protected]

Definition at line 70 of file qclickablelabel.h.

typedef std::vector< QRect > QClickableLabel::RectVectorType [protected]

Definition at line 67 of file qclickablelabel.h.


Constructor & Destructor Documentation

QClickableLabel::QClickableLabel ( QWidget *  parent,
Qt::WFlags  f = 0 
)

Definition at line 24 of file qclickablelabel.cpp.

:QLabel(parent, f)
{

}
QClickableLabel::QClickableLabel ( const QString &  text,
QWidget *  parent,
Qt::WFlags  f = 0 
)

Definition at line 31 of file qclickablelabel.cpp.

:QLabel(text, parent, f)
{

}
QClickableLabel::~QClickableLabel (  ) [virtual]

Definition at line 38 of file qclickablelabel.cpp.

{

}

Member Function Documentation

void QClickableLabel::AddHotspot ( const QString &  name,
const QRect  position 
)

Definition at line 43 of file qclickablelabel.cpp.

References m_HotspotIndexForName, m_HotspotNameForIndex, and m_Hotspots.

Referenced by QmitkStandardViews::QmitkStandardViews().

{
  m_Hotspots.push_back( position );
  m_HotspotIndexForName.insert( std::make_pair( name, (int)m_Hotspots.size()-1 ) );
  m_HotspotNameForIndex.insert( std::make_pair( (int)m_Hotspots.size()-1, name ) );
}
unsigned int QClickableLabel::matchingRect ( const QPoint &  p ) [protected]

returns index == m_Hotspots.size() if nothing is hit

Definition at line 99 of file qclickablelabel.cpp.

References m_Hotspots.

Referenced by mousePressEvent(), and mouseReleaseEvent().

{
  unsigned int index(0);
  for ( RectVectorType::iterator iter = m_Hotspots.begin();
        iter != m_Hotspots.end();
        ++iter )
  {
    if ( iter->contains(p) )
    {
      return index;
    }
    
    ++index;
  }

  return index;
}
void QClickableLabel::mousePressed ( const QString &  hotspotName ) [signal]

Referenced by mouseReleaseEvent().

void QClickableLabel::mousePressed ( unsigned int  hotspotIndex ) [signal]
void QClickableLabel::mousePressEvent ( QMouseEvent *  e ) [protected, virtual]

Definition at line 79 of file qclickablelabel.cpp.

References m_HotspotNameForIndex, m_Hotspots, matchingRect(), and mouseReleased().

{
  unsigned int index = matchingRect( e->pos() );
  if ( index < m_Hotspots.size() )
  {
    emit mouseReleased( index );
    emit mouseReleased( m_HotspotNameForIndex[index] );
  }
}
void QClickableLabel::mouseReleased ( unsigned int  hotspotIndex ) [signal]
void QClickableLabel::mouseReleased ( const QString &  hotspotName ) [signal]

Referenced by mousePressEvent().

void QClickableLabel::mouseReleaseEvent ( QMouseEvent *  e ) [protected, virtual]

Definition at line 89 of file qclickablelabel.cpp.

References m_HotspotNameForIndex, m_Hotspots, matchingRect(), and mousePressed().

{
  unsigned int index = matchingRect( e->pos() );
  if ( index < m_Hotspots.size() )
  {
    emit mousePressed( index );
    emit mousePressed( m_HotspotNameForIndex[index] );
  }
}
void QClickableLabel::RemoveAllHotspots (  )

Definition at line 72 of file qclickablelabel.cpp.

References m_HotspotIndexForName, m_HotspotNameForIndex, and m_Hotspots.

void QClickableLabel::RemoveHotspot ( unsigned int  hotspotIndex )

Definition at line 61 of file qclickablelabel.cpp.

References m_HotspotIndexForName, m_HotspotNameForIndex, and m_Hotspots.

{
  if ( hotspotIndex < m_Hotspots.size() )
  {
    m_Hotspots.erase( m_Hotspots.begin() + hotspotIndex );
    QString name = m_HotspotNameForIndex[hotspotIndex];
    m_HotspotNameForIndex.erase( hotspotIndex );
    m_HotspotIndexForName.erase( name );
  }
}
void QClickableLabel::RemoveHotspot ( const QString &  name )

Definition at line 51 of file qclickablelabel.cpp.

References m_HotspotIndexForName.

{
  NameToIndexMapType::iterator iter = m_HotspotIndexForName.find( name );

  if ( iter != m_HotspotIndexForName.end() )
  {
    RemoveHotspot( iter->second );
  }
}

Member Data Documentation

Definition at line 72 of file qclickablelabel.h.

Referenced by AddHotspot(), RemoveAllHotspots(), and RemoveHotspot().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines