TabWidget中tabBar文字從左向右顯示

2021-09-22 13:03:26 字數 1938 閱讀 8955

在qt中,當我們使用tabwidget,有時會把tabposition屬性設定成東西朝向的。但這時,我們會發現tabbar中的文字朝向也變了,如下圖所示:

而我們總是希望文字是正對著我們的,而不是翻轉過後的樣子。

這裡,我們可以通過setstyle來設定widget的風格,而qtabbar是繼承自widget的也可以通過同樣的方式,設定風格。

setstyle函式的定義為void setstyle(qstyle *style),也就是說我們需要傳乙個qstyle型別的變數進去。

然後要說乙個繼承自qstyle的類:qproxystyle

qproxystyle

qproxystyle類是乙個簡便的類,它簡化了動態覆蓋的qstyle元素。 

qproxystyle封裝了乙個qstyle(通常是預設的系統風格),用於動態覆蓋繪畫或其他特定風格的行為。

(以上為qt幫助中的說明)

接下來,我們需要寫乙個自定義的繼承自qproxystyle的類,然後作為引數傳到setstyle裡面。

在這個自定義類中,我們過載qproxystyle中的函式drawcontrol()

[override virtual]voidqproxystyle::drawcontrol(qstyle::controlelement

element, const qstyleoption *option, qpainter *painter, const qwidget *widget = nullptr) const

用提供的painter繪製給定的element,並使用選項指定的樣式選項。

widget引數是可選的,可以用作繪製控制項的幫助。 option引數是乙個指向qstyleoption物件的指標,可以使用qstyleoption_cast()函式將其轉換為正確的子類。

(以上為qt幫助中的說明)

也就是說我們可以在drawcontrol中進行內容的繪圖,可以改變tabbar的樣式

**如下(建乙個繼承於qproxystyle的類):

class customtabstyle:public qproxystyle

qsize sizefromcontents(contentstype type, const qstyleoption *option,

const qsize &size, const qwidget *widget) const //設定bar上面的內容大小

return s;

}void drawcontrol(controlelement element, const qstyleoption *option, qpainter *painter, const qwidget *widget) const

qtextoption option;

option.setalignment(qt::aligncenter); //使文字位置居中

if (tab->state & qstyle::state_selected)

else

painter->drawtext(allrect, tab->text, option);

return;}}

if (element == ce_tabbartab) }};

然後new乙個customtabstyle給相應的tabbar:

ui->tabwidget->tabbar()->setstyle(new customtabstyle);
效果圖:

Nuxt使用vant導航欄元件tabbar

按照我之前在vue cli配置方法 發現watch事件重新整理頁面沒有執行,而在vue cli卻執行 我也不想nuxt是什麼原因 機制導致的 直接換種思路 元件components tabbar.vue v model isact inactive color 666666 active color...

Android選項卡 TabWidget 例子

publicclassoneactivityextendsactivity 注意 tabhost tabwidget framelayout的id必須分別為 android id tabhost,android id tabs,android id tabcontent 另外還要注意一下androi...

示例11 TabWidget的應用(2)

3.6.7 示例11 tabwidget的應用 2 在主窗體mainwindow.cpp檔案中建構函式 建構函式 mainwindow mainwindow qwidget parent qmainwindow parent ui new ui mainwindow 在主窗體mainwindow.c...