2011-12-07 30 views

Trả lời

2

Nếu bạn muốn mục được chọn xuất hiện khác khi hộp kết hợp hiển thị phần tử của nó (ví dụ: trong trạng thái "thả xuống"), bạn có thể thay đổi màu cho Highlight và HighlightedText trong bảng màu hoặc kiểu khu vực nội 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(); 
} 

Nếu bạn chỉ có nghĩa là phong cách của các yếu tố trong "sụp đổ" nhà nước, tôi muốn có một cái nhìn tại "Customizing QComboBox" của Sheets tham khảo Qt style cho ví dụ về những gì bạn đang cố gắng làm.

+0

Cảm ơn bạn đã trả lời! Tôi chỉ đang cố thay đổi lựa chọn mục thả xuống của combobox. Tôi không muốn sử dụng màu nền để chọn. Tôi muốn sử dụng đường viền dưới cùng. Tôi đã thực hiện việc này với QMenu: QMenu :: item { border-bottom: 5px solid white; lề: 3px; } QMenu :: mục :: được chọn { border-bottom: 5px solid black; lề: 3px; } và muốn làm điều đó với mục thả xuống hộp combo ... –

11

Giải pháp là để

  • tạo ra một đối tượng ListView
  • thiết stylesheet của nó
  • sử dụng nó như quan điểm của các ComboBox

Dưới đây là làm thế nào:

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

Ghi chú: Tôi nghĩ rằng, according to the Qt docs áp dụng kiểu này cũng sẽ hoạt động ... nhưng không.

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

Cảm ơn! Nhưng một câu hỏi nữa ... Làm thế nào để thoát khỏi khung lựa chọn mỏng? Xem ví dụ: http://vlasovsoft.net/images/1.png –

+5

Giải pháp sự kiện tốt hơn được hiển thị tại đây http://stackoverflow.com/questions/13308341/qcombobox-abstractitemviewitem?rq=1 – bkausbk

Các vấn đề liên quan