Стиль поля всплывающего меню QComboBox Qt 4

После бесчисленных часов попыток стилизовать QComboBox я застрял с верхним и нижним полем, где вставляются элементы.

Я хотел бы либо удалить, либо применить цвет фона к верхним и нижним пробелам всплывающего меню.

Экран QComboBox http://img576.imageshack.us/img576/3402/screenshot20120130at144.png< /а>

Я добавил минимальную высоту в QListView, чтобы не отображать верхнюю и нижнюю стрелки. Я также просмотрел класс QComboBoxPrivate в исходниках Qt, но кажется, что верхнее и нижнее поля жестко запрограммированы.

Спасибо за вашу помощь.

Отредактировано: пока это моя таблица стилей

QComboBox {
    border: 1px solid rgb(95, 95, 95);
    border-radius: 3px;
    padding: 1px 18px 1px 3px;
    min-width: 6em;
    color: rgb(220, 220, 220);
    background-color: rgb(80, 80, 80);
    margin: 0 0 0 0;
}

QComboBox:editable {
    background: rgb(80, 80, 80);
}

QComboBox:!editable {
    background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                                  stop: 0 rgb(51, 51, 51), stop: 0.4 rgb(39, 39, 39),
                                  stop: 0.5 rgb(32,32,32), stop: 1.0 rgb(38,38,38));;
}

QComboBox::drop-down:editable {
}

QComboBox:!editable:on {
}

QComboBox::drop-down:editable:on {
}

QComboBox:on { /* shift the text when the popup opens */
    padding-top: 3px;
    padding-left: 4px;
    background-color: rgb(80, 80, 80);
}

QComboBox::drop-down {
    subcontrol-origin: padding;
    subcontrol-position: center right;
    width: 15px; 
    right:3px;
    border-top-right-radius: 3px; /* same radius as the QComboBox */
    border-bottom-right-radius: 3px;
    background:none;
}

QComboBox::down-arrow {
    image: url(:/images/arrow-down-inverted.png);
    height: 10px;
}

QComboBox::down-arrow:on { /* shift the arrow when popup is open */
    top: 1px;
    left: 1px;
}

QListView#comboListView {
    background: rgb(80, 80, 80);
    color: rgb(220, 220, 220);
    min-height: 90px;
    margin: 0 0 0 0;
}

QListView#comboListView::item {
    background-color: rgb(80, 80, 80);
}

QListView#comboListView::item:hover {
    background-color: rgb(95, 95, 95);
}

person Kirell    schedule 30.01.2012    source источник
comment
Можете ли вы опубликовать таблицу стилей, которая у вас есть?   -  person Arnold Spence    schedule 30.01.2012
comment
Здесь та же проблема, похоже, она вызвана заполнением QComboBox. Но установка его на 0, когда состояние :on не помогает:/   -  person jaskmar    schedule 24.01.2019


Ответы (3)


Вам нужно настроить QAbstractItemView в QComboBox:

QComboBox QAbstractItemView {
    margin-top: 0px;
    padding-bottom: 0px;
}
person Derek    schedule 29.08.2012

Попробуйте следующую таблицу стилей:

QComboBox {
  margin-top: 0px;
  margin-bottom: 0px;
}

Это должно установить поля равными 0. Также здесь ссылка qt на таблицы стилей.

person Neox    schedule 30.01.2012
comment
Он устанавливает поля QCombobox, а не поля меню внутри. - person Kirell; 31.01.2012

Решение, которое я нашел для удаления белого поля, состоит в том, чтобы установить поле со списком только для чтения.

QCombobox* choiceBox = new QCombobox;
choiceBox->lineEdit()->setReadOnly(true);
person Kirell    schedule 20.02.2012