Pergunta

Estou prestes a começar a escrever uma GUI para um aplicativo de síntese modular (como Alsa Modular Synth, Pure Data, Ingen) que será usado para edição de patch (som).

O que preciso fazer é algo assim:

Ingen
(fonte: drobila.net)

Pure Data

hallseymrk1?
(fonte: www.mcgill.ca)

Então, basicamente, é uma área onde posso desenhar alguns retângulos (caixas) que representam módulos de sintetizador com portas de entrada e saída que posso conectar com fios.

O problema é que não consigo descobrir como criar um widget para a área de edição:Usar um contexto simples de desenho 2D onde desenho as caixas manualmente parece ser a única maneira lógica de fazer isso, mas fazendo isso perco todo o excelente gerenciamento de eventos que o qt me oferece.

Gostaria de saber se existe a possibilidade de criar um layout customizado que simplesmente pegue as coordenadas das "caixas" criadas e coloque-as na tela, para que eu implemente as caixas como subclasses do QWidget (e reutilize o sistema de manipulação de eventos do qt) e adicione para a janela, como faço normalmente.

Ou talvez haja uma maneira melhor?

Obrigado

Foi útil?

Solução

Dê uma olhada em QGraphicsScene e QGraphicsView.Desta forma você poderá criar uma cena repleta de itens.Cada item pode receber eventos de mouse e você pode pintá-lo manualmente.

Outras dicas

Você pode criar uma classe de layout personalizada que herda de QLayout e sobrecarregar a função add(QWidget* w) com as coordenadas.

Pessoalmente estou usando QGraphicsView e QGraphicsScene.Você pode manipular alguns eventos (como eventos de mouse) e encontrar facilmente seu QGraphicsItem.

Dê uma olhada no código-fonte Gephex em http://www.gephex.org/download.php

eles já construíram esse widget para Qt, embora possa ser um código um pouco antigo (QT3) e específico da aplicação.

tchau

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