2009-09-28 19 views
1

Je suis sur le point de commencer à écrire une interface graphique pour une application de synthèse modulaire (comme Alsa Modular Synth, Pure Data, Ingen) qui sera utilisée pour l'édition de patch (son).Widget d'édition de synthé modulaire Qt4

Ce que je dois faire est quelque chose comme ceci:

Ingen http://drobilla.net/blog/wp-content/uploads/2008/09/ingen.png

Pure Data

hallseymrk1?

Donc, au fond, il est un domaine où je peux dessiner des rectangles (boîtes) qui Représente des modules de synthé avec des ports d'entrée et de sortie que je peux connecter avec des fils. Le problème est que je ne peux pas comprendre comment deux créer un widget pour la zone d'édition: L'utilisation d'un contexte de dessin 2D simple où je dessine les boîtes manuellement semble être la seule façon logique de faire cela, mais cela Je perds toute la gestion de l'événement que Qt me donne. Je me demande s'il est possible de créer une mise en page personnalisée qui prend simplement les coordonnées des «boîtes» créées et les affiche à l'écran, afin que j'implémente les boîtes comme sous-classes de QWidget (et réutilise le système de gestion des événements de qt)) et je les ajoute à la fenêtre comme je le fais habituellement.

Ou peut-être y at-il un meilleur moyen?

Merci

Répondre

1

Jetez un oeil à QGraphicsScene et QGraphicsView. De cette façon, vous serez en mesure de créer une scène remplie d'éléments. Chaque élément peut recevoir des événements de souris et vous pouvez le peindre manuellement.

0

Vous pouvez créer une classe de disposition personnalisée qui hérite de QLayout et surcharger la fonction add (QWidget * w) avec les coordonnées.

Personnellement, j'utilise QGraphicsView et QGraphicsScene. Vous pouvez gérer certains événements (comme un événement de souris) et facilement trouver votre QGraphicsItem.

0

Jetez un oeil à Gephex sur sourcecode http://www.gephex.org/download.php

ils ont déjà construit un tel widget de Qt pour, bien que peut-être un peu vieux code (QT3) et de l'application spécifique.

ciao