2012-07-31 16 views
6

Tengo dos botones de estilo personalizado QPushButton. Esta es la hoja de estilo para el botón Ok:QPushButton problema visual

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

Ahora aquí es lo que parece:

Ok button

lo cual está bien. Sin embargo, si se hace clic en el botón (obtiene foco), comienza a tener este aspecto:

Ok button focused

señalar que pequeñas rectángulo de sombra alrededor del texto. Parece que el texto está siendo "seleccionado". Cuando el botón pierde el foco, comienza a verse normal nuevamente. Supongo que se debe a que los controles seleccionados ObtenerTextoSeleccionado así:

enter image description here

Sin embargo, quiero que mi botón para permanecer sin cambios, sin importar si se trata de centrado o no. ¿Hay alguna forma de resolver este problema?

+0

anula paintEvent – Rolle

Respuesta

3

Encontré la solución. Resultó ser muy simple.

El problema fue causado por el botón que recibe el foco. Todo lo que necesitaba hacer era establecer el atributo focusPolicy del botón en NoFocus. Se puede hacer ya sea en QtDesigner:

enter image description here

o en el código:

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

Después se hace, los clics en el botón no hará que se consigue el enfoque y la la apariencia no cambiará

+3

Puede obtener la ligera diferencia en el comportamiento - cuando tiene foco en el botón puede 'presionarlo' con la tecla Espacio, pero todo depende de lo que necesite. Personalmente siempre me gustaron las GUI que pueden usarse con el teclado, tan malo que los desarrolladores pasan por alto esta característica en estos días :(. – kolenda

+0

@Kolenda, sí , Soy consciente de esto. Tengo un 'QLineEdit' en mi formulario, que el usuario usará para ingresar sus cosas. Realizaré un seguimiento de los hits 'Enter' en este' QLineEdit', y presionaré el botón cuando eso ocurra. – SingerOfTheFall

+0

@Kolenda, ese es un buen punto, me parece muy decepcionante no poder presionar 'enter' para completar el relleno, también. – SingerOfTheFall

0

No lo intenté pero creo que podría solucionarlo configurando QPushButton:hover con el mismo estilo que QPushButton. Hay un estilo predeterminado que hace que el botón se ponga rojo al pasar el mouse, solo necesita averiguar cuál es (probablemente hover) y anularlo.

+0

No se pone rojo al suspenderse. Se convierte así después de hacer clic, y permanece así hasta que se haga clic en cualquier otro control. – SingerOfTheFall

+0

@SingerOfTheFall, a la derecha, luego pruebe el estado 'QPushButton: focus'. –

+0

acaba de intentar, no ayuda = ( – SingerOfTheFall

3

Esto elimina el rectángulo naranja:

QPushButton:focus { 
    outline: none; 
} 

PS: Usted debe tratar de añadir un poco de estilo al estado del foco como un cambio de color de fondo de manera que este estado permanece "visible" para el usuario.

Cuestiones relacionadas