QComboBox下拉列表 - 设置所选项目样式

Ser*_*sov 9 qt qcombobox

是否可以设置QComboBox下拉列表的选定项目样式(Qt样式表)?

小智 11

解决方案是

  • 创建一个ListView对象
  • 设置样式表
  • 使用它作为ComboBox的视图

方法如下:

    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;
    }
Run Code Online (Sandbox Code Playgroud)

备注:我认为,根据Qt文档应用这种风格也应该有用......但事实并非如此.

QComboBox QAbstractItemView::item {
    border-bottom: 5px solid white; margin:3px;
}
QComboBox QAbstractItemView::item:selected {
    border-bottom: 5px solid black; margin:3px;
}
Run Code Online (Sandbox Code Playgroud)

  • 这里显示了一个事件更好的解决方案http://stackoverflow.com/questions/13308341/qcombobox-abstractitemviewitem?rq=1 (5认同)

Dav*_*eer 2

如果您的意思是希望当组合框显示其元素时(即处于“下拉”状态),所选项目显示不同,您可以更改调色板中“突出显示”和“突出显示文本”的颜色,或设置内部样式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();
}
Run Code Online (Sandbox Code Playgroud)

如果您只是指处于“折叠”状态的元素的样式,我会查看 Qt 样式表参考的“自定义 QComboBox ”部分,以获取有关您尝试执行的操作的示例。