[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