finding the corresponding tabBar fixed

This commit is contained in:
Uwe Rathmann 2019-04-18 16:16:44 +02:00
parent bbc3c6bc62
commit 89f1148a7b
2 changed files with 19 additions and 38 deletions

View File

@ -7,6 +7,7 @@
#include "QskSkinlet.h" #include "QskSkinlet.h"
#include "QskTabBar.h" #include "QskTabBar.h"
#include "QskTextOptions.h" #include "QskTextOptions.h"
#include "QskQuick.h"
#include <qfontmetrics.h> #include <qfontmetrics.h>
#include <qpointer.h> #include <qpointer.h>
@ -14,6 +15,11 @@
QSK_SUBCONTROL( QskTabButton, Panel ) QSK_SUBCONTROL( QskTabButton, Panel )
QSK_SUBCONTROL( QskTabButton, Text ) QSK_SUBCONTROL( QskTabButton, Text )
static inline QskTabBar* qskFindTabBar( QskTabButton* button )
{
return qskFindAncestorOf< QskTabBar* >( button->parentItem() );
}
class QskTabButton::PrivateData class QskTabButton::PrivateData
{ {
public: public:
@ -36,7 +42,8 @@ QskTabButton::QskTabButton( const QString& text, QQuickItem* parent )
: Inherited( parent ) : Inherited( parent )
, m_data( new PrivateData( text ) ) , m_data( new PrivateData( text ) )
{ {
resolveTabBar(); if ( parent )
m_data->tabBar = qskFindTabBar( this );
initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed ); initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed );
@ -102,29 +109,17 @@ QRectF QskTabButton::layoutRect() const
QskAspect::Placement QskTabButton::effectivePlacement() const QskAspect::Placement QskTabButton::effectivePlacement() const
{ {
if ( m_data->tabBar ) if ( m_data->tabBar )
{ return m_data->tabBar->effectivePlacement();
const auto pos = m_data->tabBar->position();
switch ( pos )
{
case Qsk::Left:
return QskAspect::Left;
case Qsk::Right:
return QskAspect::Right;
case Qsk::Top:
return QskAspect::Top;
case Qsk::Bottom:
return QskAspect::Bottom;
}
}
return QskAspect::NoPlacement; return QskAspect::NoPlacement;
} }
QskTabBar* QskTabButton::tabBar() const const QskTabBar* QskTabButton::tabBar() const
{
return m_data->tabBar;
}
QskTabBar* QskTabButton::tabBar()
{ {
return m_data->tabBar; return m_data->tabBar;
} }
@ -145,7 +140,7 @@ void QskTabButton::changeEvent( QEvent* event )
} }
case QEvent::ParentChange: case QEvent::ParentChange:
{ {
resolveTabBar(); m_data->tabBar = qskFindTabBar( this );
break; break;
} }
default: default:
@ -155,18 +150,4 @@ void QskTabButton::changeEvent( QEvent* event )
Inherited::changeEvent( event ); Inherited::changeEvent( event );
} }
void QskTabButton::resolveTabBar()
{
auto p = parent();
while ( p )
{
if ( const auto tabBar = qobject_cast< QskTabBar* >( p ) )
{
m_data->tabBar = tabBar;
break;
}
p = p->parent();
}
}
#include "moc_QskTabButton.cpp" #include "moc_QskTabButton.cpp"

View File

@ -38,9 +38,11 @@ class QSK_EXPORT QskTabButton : public QskAbstractButton
QSizeF contentsSizeHint() const override; QSizeF contentsSizeHint() const override;
QRectF layoutRect() const override; QRectF layoutRect() const override;
QskAspect::Placement effectivePlacement() const override; QskAspect::Placement effectivePlacement() const override;
QskTabBar* tabBar() const; const QskTabBar* tabBar() const;
QskTabBar* tabBar();
Q_SIGNALS: Q_SIGNALS:
void textChanged( const QString& text ); void textChanged( const QString& text );
@ -50,8 +52,6 @@ class QSK_EXPORT QskTabButton : public QskAbstractButton
void changeEvent( QEvent* ) override; void changeEvent( QEvent* ) override;
private: private:
void resolveTabBar();
class PrivateData; class PrivateData;
std::unique_ptr< PrivateData > m_data; std::unique_ptr< PrivateData > m_data;
}; };