2015-08-21 10 views
2

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

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

ответ

2

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

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

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

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

Что я в итоге делал внизу, устанавливал «пустой» (полностью прозрачный) png в качестве значка, а это значит, что я могу контролировать размер кнопки, используя настройку «Размер значка». Затем я установил «образ» для кнопок и использовал поднабор «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); 
}