finding the corresponding tabBar fixed
This commit is contained in:
parent
bbc3c6bc62
commit
89f1148a7b
@ -7,6 +7,7 @@
|
||||
#include "QskSkinlet.h"
|
||||
#include "QskTabBar.h"
|
||||
#include "QskTextOptions.h"
|
||||
#include "QskQuick.h"
|
||||
|
||||
#include <qfontmetrics.h>
|
||||
#include <qpointer.h>
|
||||
@ -14,6 +15,11 @@
|
||||
QSK_SUBCONTROL( QskTabButton, Panel )
|
||||
QSK_SUBCONTROL( QskTabButton, Text )
|
||||
|
||||
static inline QskTabBar* qskFindTabBar( QskTabButton* button )
|
||||
{
|
||||
return qskFindAncestorOf< QskTabBar* >( button->parentItem() );
|
||||
}
|
||||
|
||||
class QskTabButton::PrivateData
|
||||
{
|
||||
public:
|
||||
@ -36,7 +42,8 @@ QskTabButton::QskTabButton( const QString& text, QQuickItem* parent )
|
||||
: Inherited( parent )
|
||||
, m_data( new PrivateData( text ) )
|
||||
{
|
||||
resolveTabBar();
|
||||
if ( parent )
|
||||
m_data->tabBar = qskFindTabBar( this );
|
||||
|
||||
initSizePolicy( QskSizePolicy::Minimum, QskSizePolicy::Fixed );
|
||||
|
||||
@ -102,29 +109,17 @@ QRectF QskTabButton::layoutRect() const
|
||||
QskAspect::Placement QskTabButton::effectivePlacement() const
|
||||
{
|
||||
if ( m_data->tabBar )
|
||||
{
|
||||
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 m_data->tabBar->effectivePlacement();
|
||||
|
||||
return QskAspect::NoPlacement;
|
||||
}
|
||||
|
||||
QskTabBar* QskTabButton::tabBar() const
|
||||
const QskTabBar* QskTabButton::tabBar() const
|
||||
{
|
||||
return m_data->tabBar;
|
||||
}
|
||||
|
||||
QskTabBar* QskTabButton::tabBar()
|
||||
{
|
||||
return m_data->tabBar;
|
||||
}
|
||||
@ -145,7 +140,7 @@ void QskTabButton::changeEvent( QEvent* event )
|
||||
}
|
||||
case QEvent::ParentChange:
|
||||
{
|
||||
resolveTabBar();
|
||||
m_data->tabBar = qskFindTabBar( this );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -155,18 +150,4 @@ void QskTabButton::changeEvent( QEvent* 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"
|
||||
|
@ -38,9 +38,11 @@ class QSK_EXPORT QskTabButton : public QskAbstractButton
|
||||
|
||||
QSizeF contentsSizeHint() const override;
|
||||
QRectF layoutRect() const override;
|
||||
|
||||
QskAspect::Placement effectivePlacement() const override;
|
||||
|
||||
QskTabBar* tabBar() const;
|
||||
const QskTabBar* tabBar() const;
|
||||
QskTabBar* tabBar();
|
||||
|
||||
Q_SIGNALS:
|
||||
void textChanged( const QString& text );
|
||||
@ -50,8 +52,6 @@ class QSK_EXPORT QskTabButton : public QskAbstractButton
|
||||
void changeEvent( QEvent* ) override;
|
||||
|
||||
private:
|
||||
void resolveTabBar();
|
||||
|
||||
class PrivateData;
|
||||
std::unique_ptr< PrivateData > m_data;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user