[Interest] How to programatically make a tab's text bold?

Vadim Peretokin vperetokin at gmail.com
Wed Apr 4 12:20:21 CEST 2018


Thanks a ton! Works.

On Wed, Apr 4, 2018 at 12:07 PM Igor Mironchik <igor.mironchik at gmail.com>
wrote:

>
> #include <QTabWidget>
> #include <QApplication>
> #include <QTabBar>
> #include <QProxyStyle>
> #include <QPainter>
> #include <QStyleOption>
>
> class Style : public QProxyStyle
> {
> public:
>     Style( QTabBar * bar )
>         :    m_boldTab( 0 )
>         ,    m_bar( bar )
>     {
>     }
>
>     ~Style()
>     {
>     }
>
>     void drawControl( ControlElement element,
>         const QStyleOption *option,
>         QPainter *painter,
>         const QWidget *widget = Q_NULLPTR) const
>     {
>         if( element == QStyle::CE_TabBarTab )
>         {
>             if( m_bar->tabAt( option->rect.center() ) == m_boldTab )
>             {
>                 QFont font = widget->font();
>                 font.setBold( true );
>
>                 painter->save();
>                 painter->setFont( font );
>                 QProxyStyle::drawControl( element, option, painter, widget
> );
>                 painter->restore();
>             }
>             else
>                 QProxyStyle::drawControl( element, option, painter, widget
> );
>         }
>         else
>             QProxyStyle::drawControl( element, option, painter, widget );
>     }
>
> private:
>     int m_boldTab;
>     QTabBar * m_bar;
> };
>
> class Tab : public QTabBar
> {
> public:
>     Tab( QWidget * parent )
>         :    QTabBar( parent )
>         ,    m_boldTab( 0 )
>     {
>     }
>
>     ~Tab()
>     {
>     }
>
> protected:
>     QSize tabSizeHint(int index) const
>     {
>         if( index == m_boldTab )
>         {
>             const QSize s = QTabBar::tabSizeHint( index );
>             const QFontMetrics fm( font() );
>             const int w = fm.width( tabText( index ) );
>
>             QFont f = font();
>             f.setBold( true );
>             const QFontMetrics bfm( f );
>
>             const int bw = bfm.width( tabText( index ) );
>
>             return QSize( s.width() - w + bw, s.height() );
>         }
>         else
>             return QTabBar::tabSizeHint( index );
>     }
>
> private:
>     int m_boldTab;
> };
>
> class TabWidget
>     :    public QTabWidget
> {
> public:
>     TabWidget()
>         :    m_tabBar( new Tab( this ) )
>         ,    m_style( m_tabBar )
>     {
>         m_tabBar->setStyle( &m_style );
>         setTabBar( m_tabBar );
>     }
>
>     ~TabWidget()
>     {
>     }
>
> private:
>     Tab * m_tabBar;
>     Style m_style;
> };
>
> int main( int argc, char ** argv )
> {
>     QApplication app( argc, argv );
>
>     TabWidget t;
>     QWidget w1, w2;
>     t.addTab( &w1, "Test Tab With Long Name" );
>     t.addTab( &w2, "Second Tab" );
>
>     t.show();
>
>     return app.exec();
> }
>
>
> On 04.04.2018 10:47, Vadim Peretokin wrote:
>
>
> On Wed, Apr 4, 2018 at 7:35 AM Hamish Moffatt <hamish at risingsoftware.com>
> wrote:
>
>> On 04/04/18 15:10, Vadim Peretokin wrote:
>> > How can I programatically make a tab's text bold? I'm looking to
>> > notify the user that they need to look at it.
>> >
>> > Note that this is different from using a stylesheet to set the
>> > selected tab bold - I'd like to set any random tab's text bold.
>> >
>> > Been looking at this for several days, appreciate any advice!
>>
>> Using widgets? You didn't say what context.
>>
>> Maybe you can set a dynamic property on the tab when you want it to be
>> bold, and attach a special style using properties in the stylesheet.
>>
>>
>> Hamish
>> _______________________________________________
>> Interest mailing list
>> Interest at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/interest
>>
>
> Yes, using widgets.
>
> I've tried a dynamic property however as far as I can see, I can only set
> the dynamic property on the entire tab bar - not a specific tab. How can I
> set it on a specific tab?
>
>
> _______________________________________________
> Interest mailing listInterest at qt-project.orghttp://lists.qt-project.org/mailman/listinfo/interest
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20180404/128250ea/attachment.html>


More information about the Interest mailing list