QPushButton визуальная проблема

У меня есть две кнопки QPushButton в пользовательском стиле. Вот таблица стилей для кнопки Ok:

QPushButton
{ 
    background-color:#9dce2c;
    border-radius:7px;
    border:1px solid #83c41a;
    color:#ffffff;
    font-size:15px;
    font-weight:bold;
    padding:4px 24px;
    text-decoration:none;
}
QPushButton:pressed
{
    border:2px solid black;
}

Теперь вот как это выглядит:

Кнопка ОК

что хорошо. Однако, если кнопка нажата (получает фокус), она начинает выглядеть так:

Кнопка ОК сфокусирована

Обратите внимание на небольшой затемненный прямоугольник вокруг текста. Похоже, что текст "выделен". Когда кнопка теряет фокус, она снова начинает выглядеть нормально. Я полагаю, это происходит потому, что выбранные элементы управления выделяются следующим образом:

введите здесь описание изображения

Однако я хочу, чтобы моя кнопка оставалась неизменной, независимо от того, сфокусирована она или нет. Есть ли способ решить эту проблему?


person SingerOfTheFall    schedule 31.07.2012    source источник


Ответы (4)


Это удаляет оранжевый прямоугольник:

QPushButton:focus {
    outline: none;
}

PS . Вы должны попробовать добавить какой-нибудь стиль к состоянию фокуса, например изменить фоновый цвет, чтобы это состояние оставалось "видимым" для пользователя.

person Aurélien Ooms    schedule 16.03.2013

Решение найдено. Это оказалось очень просто.

Проблема действительно была вызвана тем, что кнопка получала фокус. Все, что мне нужно было сделать, это установить для атрибута focusPolicy кнопки значение NoFocus. Это можно сделать либо в QtDesigner:

введите здесь описание изображения

или в коде:

ui.okButton->setFocusPolicy(Qt::NoFocus);

После того, как это будет сделано, нажатие на кнопку не приведет к получению фокуса, и внешний вид не изменится.

person SingerOfTheFall    schedule 31.07.2012
comment
Вы можете получить небольшую разницу в поведении - когда у вас есть фокус на кнопке, вы можете «нажать» ее клавишей пробела, но все зависит от того, что вам нужно. Лично мне всегда нравились графические интерфейсы, которые можно использовать с клавиатуры, настолько плохо, что в наши дни разработчики упускают из виду эту функцию :(. - person kolenda; 31.07.2012
comment
@Коленда, да, я знаю об этом. У меня есть QLineEdit в моей форме, которую пользователь будет использовать для ввода своих данных. Я буду отслеживать Enter обращений в этом QLineEdit и принудительно нажимать кнопку, когда это произойдет. - person SingerOfTheFall; 31.07.2012
comment
@Kolenda, это хороший момент, но меня очень разочаровывает то, что я не могу нажать enter, чтобы завершить заполнение. - person SingerOfTheFall; 31.07.2012
comment
Предоставленный вами снимок экрана относится к Qt Designer, а не к Qt Creator. Creator — это IDE, которая может (но не обязательно) интегрировать Designer - person friendzis; 31.07.2012

Я не пробовал, но думаю, вы могли бы исправить это, установив для QPushButton:hover тот же стиль, что и для QPushButton. Есть какой-то стиль по умолчанию, который делает кнопку красной при наведении, вам просто нужно выяснить, какой это (вероятно, hover) и переопределить его.

person laurent    schedule 31.07.2012
comment
Он не становится красным при наведении. Он становится таким после щелчка по нему и остается таковым до тех пор, пока не будет нажат любой другой элемент управления. - person SingerOfTheFall; 31.07.2012
comment
@SingerOfTheFall, верно, тогда попробуйте состояние QPushButton:focus. - person laurent; 31.07.2012
comment
@SingerOfTheFall, или это может быть состояние :default? Логически нет, но стоит попробовать. - person laurent; 31.07.2012

Здесь: http://doc.qt.io/qt-5/stylesheet-examples.html

Я нашел такие параметры, как:

"selection-color: yellow;"
"selection-background-color: blue;"

Я не пробовал их, но это может быть то, что вам нужно.

person kolenda    schedule 31.07.2012