Pergunta

Eu estou tentando criar um aplicativo em Qt / C ++ com Qt4.5 e quer as todas as janelas ativas para mudança de opacidade em um evento de mouseover ...

Pelo que entendi, não há nenhum evento mouseover explícito na Qt.

No entanto, eu tenho funcionamento rudimentar por reimplementar mouseMoveEvent de QWidget () na classe que declara a minha mainwindow. Mas mouseMoveEvent do mainwindow não é chamado sempre que o mouse se desloca sobre qualquer uma das caixas de grupo que eu criei lá (understandbly desde QGroupbox tem seu próprio reimplementação de mouseMoveEvent).

Assim como uma obra barata por aí, eu ainda estou usando o mouseMoveEvent da minha mainwindow mas uma consulta a posição global do mouse, com base na posição (x, y) do mainwindow (obtido através -> pos ()) eo tamanho da janela. (-> tamanho -> rHeight e rWidth), posso verificar se o mouse está dentro dos limites da área do mainwindow e alterar a opacidade assim

Esta tem tido um sucesso muito limitado. A borda direita funciona bem, as mudanças esquerda opacidade 4 pixels início. O topo não funciona (presumivelmente porque o mouse passa pelo bar menu e título) e na parte inferior muda muito cedo.

Eu pensei em criar uma classe QWidget recipiente vazio e, em seguida, colocar todo o resto lá, mas eu senti que ele ainda não resolveria o grande problema da base de widget não receber o mouseMoveEvent se ele já foi implementado em uma criança widget.

Por favor sugerir eventuais correcções / erros que eu fiz no meu método ou quaisquer métodos alternativos para alcançar este objectivo.

P.S. Eu duvido que isso é importante, mas eu estou trabalhando Qt Creator IDE, não integração Qt em VS2008 (é as mesmas classes de qualquer maneira - compilador diferente, porém, mingw )

Foi útil?

Solução

Instalação evento filtra para cada um de seus widgets filhos pode fazer o truque. Isso permitirá que sua janela principal para receber eventos criança tais como as de vocês, caixas de grupo. Você pode encontrar exemplo de código aqui .

Outras dicas

Você pode estar interessado em filtros de eventos. QObject prova uma maneira de interceptar todos os eventos fechando em torno de sua aplicação.

http://doc.trolltech.com/4.5/eventsandfilters.html # evento-filtros

Se eu entendo o que você está tentando fazer, eu iria reimplementar enterEvent do widget () e leaveEvent (). O mouse entra evento provocaria o fade-in eo leaveEvent provocaria o fade-out.

EDIT: depois de reler várias vezes, eu ainda não sei o que você está tentando realizar. Desculpe se minha sugestão não ajuda. : -)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top