4

背景のグラデーションと 2 つの問題がある QTabWidget があります。

  1. アクティブなタブの周囲の煩わしいアウトラインを削除するにはどうすればよいですか (画像を参照)。押しボタンのように「outline: none」にしてみましたが、効果がないようです。

  2. 無効なタブのスタイルを設定するにはどうすればよいですか? :disabled と :!enabled を試しましたが、どちらも機能しません。// 編集: これは :disabled で機能しますが、すべてのプロパティでは機能しません。サポートされていないものだけを試したようです。

煩わしい集中

qtのドキュメントは役に立ちませんでした。グーグルでも。:-(

4

3 に答える 3

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());

これにより、スタイル シートが引き続き機能するようになります。

これを行う簡単な方法があればいいのですが、見つけられませんでした:)

于 2012-11-06T04:08:07.570 に答える
2

このスレッドは古いですが、おそらくこれは人々を助けるでしょう.

フォーカスを使用する必要がない場合は、タブ ウィジェットから設定できます。

ui->tabWidget->setFocusPolicy(Qt::NoFocus);

于 2015-04-03T08:33:12.387 に答える
1

以下のスニペットをスタイルに追加することで、フォーカスの四角形を削除できます。

QWidget {
    outline: 0;
}

QTabWidget のスタイルとは直接関係ありませんが、期待どおりに動作します。

于 2015-01-07T07:11:56.543 に答える