我有一個QTabWidget具有背景漸變和兩個問題。樣式QTabWidget
我如何去除活動選項卡周圍的anoying輪廓(請參閱圖像)?我用按鈕嘗試「大綱:無」,但似乎沒有效果。
如何設置禁用標籤的樣式?我嘗試過:禁用和:!啓用但都不起作用。 //編輯:這適用於:禁用,但不適用於所有屬性。似乎我試過唯一不支持的。
Qt文檔是沒有幫助。 Google也是。 :-(
我有一個QTabWidget具有背景漸變和兩個問題。樣式QTabWidget
我如何去除活動選項卡周圍的anoying輪廓(請參閱圖像)?我用按鈕嘗試「大綱:無」,但似乎沒有效果。
如何設置禁用標籤的樣式?我嘗試過:禁用和:!啓用但都不起作用。 //編輯:這適用於:禁用,但不適用於所有屬性。似乎我試過唯一不支持的。
Qt文檔是沒有幫助。 Google也是。 :-(
看來,焦點矩形由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());
這應該讓你的樣式表來繼續工作。
這將是很好,如果有這樣做更簡單的方法,但我無法找到一個:)
焦點矩形,可以通過添加以下到您的風格片段被刪除:
QWidget {
outline: 0;
}
它與QTabWidget的風格沒有直接關係,但按預期工作。
此線程舊,但也許這會幫助人。
如果您不需要使用的重點,那麼你可以將它通過你的標籤控件:
用戶界面 - > tabWidget-> setFocusPolicy(QT :: NoFocus);
感謝您的回覆!有沒有辦法做到這一點,而沒有參考特定的風格,因爲我在linux/mac和windows上使用qt的靜態構建,這給我帶來了很多錯誤? – Oliver
必須指定特定的樣式子類是此解決方案不是最佳的原因之一。我不確定這與您可能會遇到的任何錯誤有何關係。什麼錯誤? –