QDockWidget плавающие / закрывающие кнопки при наведении изображения

Есть ли способ изменить наведенные / нажатые значки для QDockWidget(Qt 4.8) в таблице стилей? Я использую этот стиль, чтобы изменить изображение кнопки для состояния по умолчанию:

QDockWidget{
    font-weight: bold;
    titlebar-close-icon: url(:/icons/ui-dock-close-off.png);
    titlebar-normal-icon: url(:/icons/ui-dock-float-off.png);
}

Я пробовал несколько разных способов, но ни один из них, похоже, не работает.

QDockWidget::float-button:hover{
    image: url(:/icons/icons/ui-dock-float-hover.png);
}

QAbstractButton#qt_dockwidget_floatbutton{
    image: url(:/icons/icons/ui-dock-float-hover.png);
}

1 ответ

Я просто должен был сделать эту работу сам. Я нахожу поведение qss для строки заголовка QDockWidget по умолчанию очень странным в поведении.

Внизу окончательный результат, который работает для меня, но сначала нужно кое-что объяснить.

Во-первых, использование параметра "изображение" для установки значка не позволяет установить размер значка, и в конечном итоге оно уменьшается до минимума. Из-за этого я не мог использовать "titlebar-close-icon: none" так, как мне хотелось.

Во-вторых, вы не сможете использовать настройку "image" для "QDockWidget::close-button:hover" в сочетании с настройкой "titlebar-close-icon", потому что изображение "hover" будет нарисовано позади значок Вероятно, именно поэтому вы не видите ожидаемых результатов в приведенных вами примерах.

То, что я в итоге сделал ниже, установило "пустой" (полностью прозрачный) png в качестве значка, что означает, что я могу затем контролировать размер кнопки, используя настройку "icon-size". Затем я установил "изображение" для кнопок и использовал подустановку "hover" для обработки моего выделенного значка.

Наконец, я обнаружил, что (по крайней мере, в моей среде) изменения значков не сохраняются, если виджет не перемещен, а затем повторно заблокирован, и в это время все значки присутствуют и учитываются. Чтобы обойти это, я просто вызвал setFloating(True) и затем setFloating(False) после применения стиля. Там нет видимого мерцания или чего-либо, что я могу видеть, поэтому я иду с этим.

QDockWidget { 
    background: rgb(36,38,41);
    titlebar-close-icon: url(:icons/blank.png);
    titlebar-normal-icon: url(:icons/blank.png);
}

QDockWidget::title {
    background: transparent; 
    color: transparent; 
    text-align: center;
    border: none;
}

QDockWidget::close-button, QDockWidget::float-button {
    border: none;
    background: transparent;
    icon-size: 12px;
    padding: 1px;
}

QDockWidget::float-button {
    image: url(:icons/undock.png);
}

QDockWidget::close-button {
    image: url(:icons/close.png);
}

QDockWidget::float-button:hover {
    image: url(:icons/undock_hover.png);
}

QDockWidget::close-button:hover {
    image: url(:icons/close_hover.png);
}
Другие вопросы по тегам