2011-12-07 11 views

Odpowiedz

2

Jeśli chcesz, aby wybrany element wyglądał inaczej, gdy pole kombi pokazuje jego elementy (tj. W stanie "upuszczenia"), możesz zmienić kolory podświetlenia i wyróżnionego tekstu w palecie lub stylu wewnętrzna 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(); 
} 

Jeśli tylko myśli styl elementu w jego „zawalił” stan, będę przyjrzeć sekcji „Customizing QComboBox” z Qt Style Sheets odniesienia dla przykładów na to, co jesteś próbować zrobić.

+0

Dzięki za odpowiedź! Po prostu próbuję zmienić pozycję listy rozwijanej combobox. Nie chcę używać koloru tła do wyboru. Chcę użyć dolnej granicy. Udało mi się to zrobić za pomocą QMenu: QMenu :: item { border-bottom: 5px solid white; marża: 3px; } QMenu :: element :: wybrany { border-bottom: 5px solid black; marża: 3px; } i chcesz to zrobić z rozwijanym elementem combobox ... –

11

Rozwiązaniem jest

  • utworzyć obiekt ListView
  • ustawić swój arkusz stylów
  • użyć go jako punktu widzenia ComboBox

Oto jak:

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

Uwaga: Myślę, że stosowanie tego stylu powinno również działać ... ale tak nie jest.

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

Dzięki! Ale jeszcze jedno pytanie ... Jak pozbyć się cienkiej ramki wyboru? Zobacz przykład: http://vlasovsoft.net/images/1.png –

+5

Wydarzenie lepsze rozwiązanie jest pokazane tutaj http://stackoverflow.com/questions/13308341/qcombobox-abstractitemviewitem?rq=1 – bkausbk