Desidero definire l'evidenziazione dell'elemento selezionato nel menu a discesa di combobox.QComboBox style per l'elemento scelto nell'elenco a discesa
La differenza con altre domande è che non desidero applicare lo stile all'elemento "selezionato" (al passaggio del mouse) .. MA Sono interessato allo stile dell'elemento già scelto.
L'impostazione predefinita è una specie di ticker che viene dipinta sul testo. Voglio che l'oggetto scelto abbia un testo in grassetto e nessuna immagine ticker.
O nel peggiore dei casi a poco shifth il testo a destra per fare il ticker visibile correttamente.
Quello che ho è questa:
Avviso 17 ° elemento che ha ticker sopra il numero 17.
Questo è il mio foglio di stile:
QComboBox
{
subcontrol-origin: padding;
subcontrol-position: top right;
selection-background-color: #111;
selection-color: yellow;
color: white;
background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
border-style: solid;
border: 1px solid #1e1e1e;
border-radius: 5;
padding: 1px 0px 1px 20px;
}
QComboBox:hover, QPushButton:hover
{
border: 1px solid yellow;
color: white;
}
QComboBox:editable {
background: red;
color: pink;
}
QComboBox:on
{
padding-top: 0px;
padding-left: 0px;
color: white;
background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525);
selection-background-color: #ffaa00;
}
QComboBox:!on
{
color: white;
background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666, stop: 0.1 #555, stop: 0.5 #555, stop: 0.9 #444, stop: 1 #333);
}
QComboBox QAbstractItemView
{
border: 2px solid darkgray;
color: black;
selection-background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #111, stop: 1 #333);
}
QComboBox::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
width: 15px;
color: white;
border-left-width: 0px;
border-left-color: darkgray;
border-left-style: solid; /* just a single line */
border-top-right-radius: 3px; /* same radius as the QComboBox */
border-bottom-right-radius: 3px;
padding-left: 10px;
}
QComboBox::down-arrow, QSpinBox::down-arrow, QTimeEdit::down-arrow, QDateEdit::down-arrow
{
image: url(:/icons/down_arrow.png);
width: 7px;
height: 5px;
}
stavo cercando per ignorare l'elemento delega:
ui->modeComboBox->setItemDelegate(new QStyledItemDelegate());
insieme
QComboBox QAbstractItemView::item:selected style
O ignorare la vista:
QListView * listView = new QListView(ui->modeComboBox);
listView->setStyleSheet("QListView::item { \
border-bottom: 5px solid white; margin:3px; } \
QListView::item:selected { \
border-bottom: 5px solid black; margin:3px; \
color: black; \
}");
ui->modeComboBox->setView(listView);
ma in entrambi i casi questo disabilita completamente il momento clou della voce scelto (che è 17 ° articolo)
UPDATE 1
Ho provato a impostare :: articolo: foglio di stile controllato ma non ha aiutato:
QListView * listView = new QListView(ui->modeComboBox);
listView->setStyleSheet("QListView::item { \
border-bottom: 5px solid white; margin:3px; } \
QListView::item:selected { \
border-bottom: 5px solid black; margin:3px; \
color: black; } \
QListView::item:checked { \
background-color: green; \
color: green;}"
);
ui->modeComboBox->setView(listView);
Inoltre ho aggiunto che questo foglio di stile solo per essere sicuri:
QComboBox QListView::item:checked {
background-color: green;
}
Il risultato con 17 modalità di verifica è stato (il nero è solo passaggio del mouse):
UPDATE 2
Ok, ero in grado di ch ange il peso del carattere della voce selezionata, ma non riesco a togliere il ticker stupido dalla voce .. Ho sperimentato con il mio foglio di stile e ho scoperto che questi due selettori sono responsabili per lo stile della controllata articoli highlightation:
QWidget:item:selected
{
border: 0px solid #999900;
background: transparent;
}
QWidget:item:checked
{
font-weight: bold;
}
Se rimuovo l'oggetto ::: selezionato, allora l'oggetto:: checked non funziona (non mette in grassetto l'elemento selezionato) e il ticker scompare.
Su Qt forum mi hanno consigliato di ridurre in qualche modo lo "spazio per le icone di combobox" .. Non riesco a trovare il selettore che è responsabile di quello ..
Ho la sensazione che il foglio di stile è la magia nera e solo l'scelto può capire ciò che sta accadendo dentro ..
Mai provato, ma hanno hai provato: 'QComboBox QListView :: item: checked {background-color: green; } '? – Iuliu
@iuliu Ho provato che non ha funzionato, ha aggiornato la domanda .. grazie – nayana
@Iuliu il tuo suggerimento mi ha aiutato, ma l'ho impostato su QWidget .. ma ancora non ero in grado di rimuovere il ticker .. – nayana