Кажется, что прямоугольник фокуса обрабатывается 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());
Это должно позволить вашим таблицам стилей продолжать работать.
Было бы неплохо, если бы был более простой способ сделать это, но я не смог его найти :)
person
Arnold Spence
schedule
06.11.2012