2011-12-07 50 views

Respuesta

2

Si quiere decir que desea que el elemento seleccionado aparezca diferente cuando el cuadro combinado muestra sus elementos (es decir, en el estado "desplegable"), puede cambiar los colores para resaltar y resaltar texto en la paleta o estilo el interior QAbstractItemView

#include <QtGui> 

int main(int argc, char **argv) { 
    QApplication app(argc, argv); 

    QComboBox cb; 
    cb.addItem("Item 1"); 
    cb.addItem("Item 2"); 
    cb.addItem("Item 3"); 
    cb.show(); 

    QPalette p = cb.palette(); 
    p.setColor(QPalette::HighlightedText, QColor(Qt::red)); 
    p.setColor(QPalette::Highlight, QColor(Qt::green)); 
    cb.setPalette(p); 

    // OR ... 
    // cb.setStyleSheet("QComboBox QAbstractItemView { " 
    //     "selection-background-color: green; " 
    //     "selection-color: red; }"); 

    return app.exec(); 
} 

Si usted acaba de decir el estilo del elemento en su "colapsado" estado, me gustaría echar un vistazo a la sección "Customizing QComboBox" de la Qt Style Sheets referencia a ejemplos de lo que está Intentando hacer.

+0

Thanks for answer! Solo intento cambiar la selección del elemento desplegable de la lista desplegable. No quiero usar el color de fondo para la selección. Quiero usar el borde inferior Logré hacer esto con QMenu: QMenu :: item { borde inferior: 5px blanco sólido; margen: 3px; } QMenu :: item :: selected { borde inferior: 5px negro sólido; margen: 3px; } y quiero hacerlo con el elemento desplegable del cuadro combinado ... –

11

La solución es

  • crear un objeto ListView
  • establezca su hoja de estilo
  • lo utilizan como la vista del ComboBox

aquí es cómo:

int main(int argc, char *argv[]) 
    { 
    QApplication app(argc, argv); 
    QMainWindow * mainWindow = new QMainWindow(); 
    QComboBox * combo = new QComboBox(mainWindow); 
    QListView * listView = new QListView(combo); 
    combo->addItem("foo"); 
    combo->addItem("bar"); 
    combo->addItem("foobar"); 
    combo->addItem("fooooo"); 

    listView->setStyleSheet("QListView::item {        \ 
          border-bottom: 5px solid white; margin:3px; } \ 
          QListView::item:selected {      \ 
          border-bottom: 5px solid black; margin:3px; \ 
          color: black;         \ 
          }            \ 
          "); 
    combo->setView(listView); 


    mainWindow->show(); 
    app.exec(); 

    return 0; 
    } 

Observación: Creo que according to the Qt docs aplicar este estilo también debería funcionar ... pero no es así.

QComboBox QAbstractItemView::item { 
    border-bottom: 5px solid white; margin:3px; 
} 
QComboBox QAbstractItemView::item:selected { 
    border-bottom: 5px solid black; margin:3px; 
} 
+0

¡Gracias! Pero una pregunta más ... ¿Cómo deshacerse del marco de selección delgado? Ver ejemplo: http://vlasovsoft.net/images/1.png –

+5

Se muestra una mejor solución de evento aquí http://stackoverflow.com/questions/13308341/qcombobox-abstractitemviewitem?rq=1 – bkausbk

Cuestiones relacionadas