Da ich mit JSCE in WYSISWYG-Editor einzelne Seiten mit dem visuellen WYSISWYG-Editor erstellen möchte, habe ich Probleme, herauszufinden, wie man neue Fenster (außerhalb des Hauptfensters) aufruft. Ich habe eine Testanwendung erstellt, die nur eine kleine minimale Haupt-GUI hat, die ich mit dem visuellen Editor erstellt habe. Es hat eine Schaltfläche "Make New Window." Mein Ziel ist es, auf diese Schaltfläche klicken zu können und ein neues Fenster zu öffnen. Dieses neue Fenster ist eine JUCE- "GUI-Komponente" (AKA, die grafische/visuelle GUI-Editor-Datei). Nun, ich habe tatsächlich Art von erreicht dies jedoch seine Wurffehler und Behauptungen, so wäre es toll, ein sehr einfaches, Schritt-für-Schritt-Tutorial zu bekommen.JUCE - Erstellen eines neuen Fensters
Ich studierte die main.cpp-Datei, die der Projecer automatisch erstellte, um ein Gefühl dafür zu bekommen, wie sie ein Fenster erstellen. Hier ist was ich getan habe.
1) In meinem Projekt habe ich eine neue GUI-Komponente (die eine Klasse wird) hinzugefügt und nannte es "InvokedWindow". 2) In meinem Haupt-GUI-Komponenten-Header habe ich einen neuen Bereichszeiger vom Typ InvokedWindow hinzugefügt: ScopedPointer<InvokedWindow> invokedWindow;
3) Ich erstellte eine neue Schaltfläche im Haupt-GUI-Editor namens "Make New Window" und fügte diese dem Handler-Code hinzu: newWindowPtr = new InvokedWindow;
, so dass jedes Mal, wenn die Schaltfläche gedrückt wird, ein neues Objekt vom Typ InvokedWindow erstellt wird. 4) In der InvokedWindow Klasse im Konstruktor auf dem Code automatisch generiert, fügte ich hinzu:
setUsingNativeTitleBar (true);
setCentrePosition(400, 400);
setVisible (true);
setResizable(false, false);
Welche Art von ich von der Hauptdatei der JUCE Anwendung kam.
Ich habe auch einen Schieberegler zu diesem neuen Fenster hinzugefügt, nur um Funktionalität hinzuzufügen.
5) Ich habe eine überladene Funktion mir das Fenster schließen lassen:
void InvokedWindow::closeButtonPressed()
{
delete this;
}
So, jetzt, wenn ich die app ausführen und klicken Sie auf die neue Fenster Taste, ein neues Fenster wird Pop, aber ich erhalten eine Behauptung:
/* Agh! You shouldn't add components directly to a ResizableWindow - this class
manages its child components automatically, and if you add your own it'll cause
trouble. Instead, use setContentComponent() to give it a component which
will be automatically resized and kept in the right place - then you can add
subcomponents to the content comp. See the notes for the ResizableWindow class
for more info.
If you really know what you're doing and want to avoid this assertion, just call
Component::addAndMakeVisible directly.
*/
auch ich bin in der Lage, die Fenster einmal und drücken sie die Taste in der Haupt GUI zu schließen andere Instanz eines newWindow zu schaffen, aber es ein zweites Mal führt zu einem Fehler endet:
template <typename ObjectType>
struct ContainerDeletePolicy
{
static void destroy (ObjectType* object)
{
// If the line below triggers a compiler error, it means that you are using
// an incomplete type for ObjectType (for example, a type that is declared
// but not defined). This is a problem because then the following delete is
// undefined behaviour. The purpose of the sizeof is to capture this situation.
// If this was caused by a ScopedPointer to a forward-declared type, move the
// implementation of all methods trying to use the ScopedPointer (e.g. the destructor
// of the class owning it) into cpp files where they can see to the definition
// of ObjectType. This should fix the error.
ignoreUnused (sizeof (ObjectType));
delete object;
}
};
Das ist alles ein bisschen über meinen Kopf. Ich stellte mir vor, dass es nicht schade wäre, mit einem Knopf ein neues Fenster zu erstellen. Ein neues Fenster, das ich mit dem grafischen GUI-Editor bearbeiten konnte, aber ich bin nicht in der Lage, es komplett selbst herauszufinden, ich habe es versucht. Könnte jemand eine Schritt-für-Schritt-Anleitung veröffentlichen, um dies richtig zu machen? Ich habe dies in den JUCE-Foren gepostet, aber aufgrund meines Mangels an GUI-Programmierung war ich nicht in der Lage, die veröffentlichten Lösungen zu verstehen (meine eigene Schuld), also hoffe ich, einen sehr einfachen Leitfaden dazu zu bekommen. Es würde sehr geschätzt werden. Vielen Dank.
Ich gehe davon aus, dass dieser Post für die Dauer von es wird, aber ich fühle es so lange benötigt, um meine Situation und Frage genau zu beschreiben. Nichts Schlimmeres, als zu wenig Informationen zu liefern und dann Lösungen zu finden, die nicht auf Ihr Problem zutreffen, weil Ihr Problem falsch interpretiert wurde oder wichtige Informationen fehlen. –
es ist nichts falsch mit Ihrer Frage, Sie haben einen tollen Job zu erklären, was Sie wollen +1 plus, wenn Sie nach einem Leitfaden suchen, vielleicht könnten Sie dies versuchen: https://www.juce.com/doc/tutorial_main_window Ich persönlich habe ich das vorher noch nicht gemacht, bin aber sehr gespannt wie es geht. –
@KingReload, danke für die Zusicherung. Ich werde oft für meine Postlängen abgestimmt. Außerdem habe ich dieses Tutorial durchgearbeitet und es ist ziemlich gut, aber ich glaube, dass es nur erlaubt, dass Sie ein Fenster hinzufügen, dass Sie alles manuell programmieren müssen (das heißt, wenn Sie dem neuen Fenster einen Schieberegler hinzufügen möchten, Knopf, Label, Texteditor, etc ... Sie können ihn nicht über den grafischen Editor in JUCE einfügen, Sie müssen seine Platzierung, Parameter usw. manuell codieren. Ich würde gerne wissen, wie man ein neues Fenster öffnet, aber dieses Fenster kann durch den grafischen JUCE-Editor bearbeitet werden. –