Widget de edição de sintetizador modular Qt4
-
18-09-2019 - |
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:
(fonte: drobila.net)
(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
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