Czy można ustawić wybrany styl elementu (arkusz stylów Qt) listy rozwijanej QComboBox?Lista rozwijana QComboBox - ustawienie wybranego stylu elementu
Odpowiedz
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ć.
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;
}
Dzięki! Ale jeszcze jedno pytanie ... Jak pozbyć się cienkiej ramki wyboru? Zobacz przykład: http://vlasovsoft.net/images/1.png –
Wydarzenie lepsze rozwiązanie jest pokazane tutaj http://stackoverflow.com/questions/13308341/qcombobox-abstractitemviewitem?rq=1 – bkausbk
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 ... –