2015-02-06 7 views
5

Mam QTreeView z arkuszem stylów definiującym wybór. Jednak kiedy używam „fusion” styl, istnieje dodatkowy niebieski prostokąt zaznaczenia nad dekoracją:Usuń niebieski wybór z QTreeView w stylu "fusion"

blue selection rectangle

Próbowałem za pomocą show-decoration-selected: 0; w arkuszu stylów, a także ustawienie setAllColumnsShowFocus(false);, ale może nie próbuj tego.

Czy jest jakiś sposób wyłączenia lub ponownego dopasowania części selekcji obejmującej dekoratora?

Dla porównania, oto stylów:

QTreeView, QListView, QToolBar, QTableView 
{ 
    show-decoration-selected: 0; 
    background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, 
          stop: 0 #797979, stop: 0.2 #CCCCCC, 
          stop: 1.0 #FFFFFF); 
    alternate-background-color: #333333; 
    background-image: url(:/metal_scratched); 
    outline: 0; /* removes focus rectangle*/ 
} 

QTreeView::section, QListView::section, QToolBar::section, QTableView::section 
{ 
    border: 1px solid black; 
} 

QTreeView::item:hover:enabled, QListView::item:hover:enabled, QToolBar::item:hover:enabled, QTableView::item:hover:enabled 
{ 
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, 
          stop: 0 transparent, stop: 0.4 rgba(150,150,150,0.5), 
          stop: 0.5 rgba(125,125,125,0.5), stop: 1.0 transparent); 
    border-color: #B0B0B0; 
} 

QTreeView::item:hover:!enabled, QListView:disabled:hover, QToolBar:disabled:hover, QTableView:disabled:hover 
{ 
/* don't highlight */ 
} 

QTreeView::item:selected, QListView::item:selected, QToolBar::item:selected, QTableView::item:selected 
{ 
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, 
          stop: 0 transparent, stop: 0.4 rgba(75,75,75,0.5), 
          stop: 0.5 rgba(50,50,50,0.5), stop: 1.0 transparent); 
    border-color: #5A5A5A; 
    color: white; 
} 

Odpowiedz

8

Niebieska artefakt może być usunięte poprzez nadpisanie domyślnego koloru wyboru w arkuszu stylów. Pozostawiając wszystko inne (co ważne, kontynuując definiowanie nowego koloru selekcji przy użyciu QTreeView::item:selected), dodanie następującej właściwości spowoduje usunięcie niepożądanego zachowania.

QTreeView 
{ 
    // everything else the same 
    selection-background-color: transparent; 
} 
-1

ramach kolejnego przeglądu, okazało się, że jedyną drogą do osiągnięcia tego celu jest naprawdę ustawić paletę ciebie Qt aplikacji.

Jak tak,

QApplication app(argc, argv); 
app.setStyle(QStyleFactory::create("fusion")); 
QPalette palette; 
palette.setColor(QPalette::Highlight, QColor(your-color)); 
+0

Niestety, ustawienie koloru palety nie powoduje usunięcia niebieskiego artefaktu. Palety nie są szeroko szanowane przez style Qt i zazwyczaj nie ładnie grają z arkuszami stylów. –

+0

@NicolasHolthaus Z wyjątkiem tego, że obecnie używam arkusza stylów i to jedyny sposób, w jaki udało mi się pozbyć niebieskiego podkreślenia we wszystkich widżetach. Podane przeze mnie rozwiązanie jest również używane przez niektóre repozytoriów arkuszy stylów na GitHub. Zrobiłem to dokładnie z repozytorium QDarkStyle. –

+0

Wszystko, co mogę powiedzieć, to nie rozwiązało problemu w mojej aplikacji, ale właściwość "selection-background-color". Być może używamy różnych wersji Qt (używam wersji 5.4.2), a może główna przyczyna naszego problemu nie była taka sama. –

Powiązane problemy