2012-11-06 62 views
4

我有一個QTabWidget具有背景漸變和兩個問題。樣式QTabWidget

  1. 我如何去除活動選項卡周圍的anoying輪廓(請參閱圖像)?我用按鈕嘗試「大綱:無」,但似乎沒有效果。

  2. 如何設置禁用標籤的樣式?我嘗試過:禁用和:!啓用但都不起作用。 //編輯:這適用於:禁用,但不適用於所有屬性。似乎我試過唯一不支持的。

Anoying focus

Qt文檔是沒有幫助。 Google也是。 :-(

回答

2

看來,焦點矩形由QStyle(不要與樣式表混淆)正在使用處理。你可以寫一個QStyle子類,並應用到你到你的QTabWidget子類的應覆蓋drawControl()方法,什麼也不做,如果它正在繪製焦點矩形

子類會是這個樣子:

NoFocusRectStyle.h

#ifndef NOFOCUSRECTSTYLE_H 
#define NOFOCUSRECTSTYLE_H 

#include <QWindowsVistaStyle> // or the QStyle subclass of your choice 

class NoFocusRectStyle : public QWindowsVistaStyle 
{ 
public: 
    NoFocusRectStyle(); 

protected: 
    void drawControl(ControlElement element, const QStyleOption *option, 
     QPainter *painter, const QWidget *widget = 0) const; 
}; 

#endif // NOFOCUSRECTSTYLE_H 

NoFocusRectStyle.cpp

#include "NoFocusStyle.h" 

NoFocusRectStyle::NoFocusRectStyle() 
{ 
} 

void NoFocusRectStyle::drawControl(ControlElement element, 
    const QStyleOption *option, QPainter *painter, 
    const QWidget *widget) const 
{ 
    if(element == CE_FocusFrame) 
     return; 

    QWindowsVistaStyle::drawControl(element, option, painter, widget); 
} 

某處在窗體的初始化器/構造函數,你會應用自定義樣式子類的標籤控件:

ui->tabWidget->setStyle(new NoFocusRectStyle()); 

這應該讓你的樣式表來繼續工作。

這將是很好,如果有這樣做更簡單的方法,但我無法找到一個:)

+0

感謝您的回覆!有沒有辦法做到這一點,而沒有參考特定的風格,因爲我在linux/mac和windows上使用qt的靜態構建,這給我帶來了很多錯誤? – Oliver

+0

必須指定特定的樣式子類是此解決方案不是最佳的原因之一。我不確定這與您可能會遇到的任何錯誤有何關係。什麼錯誤? –

1

焦點矩形,可以通過添加以下到您的風格片段被刪除:

QWidget { 
    outline: 0; 
} 

它與QTabWidget的風格沒有直接關係,但按預期工作。

2

此線程舊,但也許這會幫助人。

如果您不需要使用的重點,那麼你可以將它通過你的標籤控件:

用戶界面 - > tabWidget-> setFocusPolicy(QT :: NoFocus);