2015-02-06 19 views
5

Ho un QTreeView con un foglio di stile che definisce la selezione. Tuttavia, quando uso lo stile "fusion", v'è un ulteriore rettangolo blu di selezione sulla decorazione:Rimuovi la selezione blu da QTreeView in stile "fusione"

blue selection rectangle

Ho provato con show-decoration-selected: 0; nel foglio di stile, così come l'impostazione setAllColumnsShowFocus(false);, ma può non farlo andare via.

C'è un modo per disattivare o restyling la parte della selezione che copre il decoratore?

Per riferimento, ecco il foglio di stile:

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; 
} 

risposta

8

Il manufatto blu può essere rimosso sovrascrivendo il colore selezione predefinita nel foglio di stile. Lasciando tutto il resto lo stesso (importante, continuando a definire un nuovo colore di selezione usando QTreeView::item:selected), l'aggiunta della seguente proprietà rimuoverà il comportamento indesiderato.

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

Sotto ulteriore revisione, ho scoperto che l'unico modo per realizzare veramente è quello di impostare la tavolozza di voi Qt applicazione.

Come così,

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

Sfortunatamente, l'impostazione del colore della tavolozza non rimuove l'artefatto blu. Le tavolozze non sono ampiamente rispettate dagli stili Qt e di solito non funzionano bene con i fogli di stile. –

+0

@NicolasHolthaus Tranne che attualmente sto usando un foglio di stile ed è l'UNICO modo in cui sono riuscito a eliminare con successo l'evidenziazione blu in tutti i widget. La soluzione che ho dato è anche usata da alcuni repository di fogli di stile su GitHub. L'ho preso dal repository QDarkStyle per essere esatto. –

+0

Tutto quello che posso dire è che non ha risolto il problema nella mia applicazione, ma la proprietà 'selection-background-color' ha fatto. Forse stiamo usando diverse versioni di Qt (sto usando 5.4.2), o forse la causa principale del nostro problema non era la stessa. –