fertig programmiertes Widget in anderes Widget einbinden?

Alles rund um die Programmierung mit Qt
Antworten
nico
Beiträge: 16
Registriert: 27. April 2009 21:42

fertig programmiertes Widget in anderes Widget einbinden?

Beitrag von nico »

Hallo,

ich benutze den Qt-Creator und habe damit erfolgreich ein Tagebuch programmiert.

Code: Alles auswählen

class Tagebuch : public QWidget, private Ui::TagebuchClass
Nun möchte ich das in eine andere Anwendung einbinden, aber nicht mittels des Qt-Designers, weil an der Stelle je nach Button-Klick auch andere Anwendungen erscheinen sollen.

Daher wollte ich das Tagebuch nun in ein Widget einfügen:

Code: Alles auswählen

void Suite::on_buttonTagebuch_clicked()
{
    Tagebuch *tb;
    widget->layout()->addWidget(tb);
}
Ich habe im Projektordner einen neuen Ordner "Tagebuch" erstellt und die Dateien "tagebuch.cpp", "tagebuch.h", "tagebuch.ui" und "ui_tagebuch.h" da rein kopiert.
Den HeaderFile habe ich eingebunden:

Code: Alles auswählen

#include "Tagebuch/tagebuch.h"
Beim Kompilieren gibt es keine Warnungen oder Fehler.

Die Anwedung schließt aber, sobald ich den Button anklicke.

Der Application Output:
Starting D:/workspace/Suite/debug/Suite.exe...
Error - RtlWerpReportException failed with status code :-1073741772. Will try to launch the process directly

D:/workspace/Suite/debug/Suite.exe exited with code -1073741819
Im Debugmodus bleibt das Programm in der Datei "qlayout.h" in folgender Zeile hängen:

Code: Alles auswählen

Q_DECLARE_PRIVATE(QLayout)
Ich habe leider keine Lösung gefunden. Die Suche nach dem Einbinden von eigenen QWidgets, brachte mich in der Dokumentation nur zur Lösung mittels Qt-Designer, aber da weiß ich dann nicht, wie ich das mit den Buttons realisieren kann, um verschiedene Anwendungen anzuzeigen.

Ich bin für jede Hilfe dankbar - auch die richtigen Suchworte würden mich freuen.

Vielen Dank schonmal,
nico
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

C++ Grundlagen...

Code: Alles auswählen

Tagebuch *tb;
widget->layout()->addWidget(tb); 
"tb" ist ein Zeiger auf eine Instanz des Typs "Tagebuch"... nur leider existiert diese Instanz bei "addWidget(tb)" noch nicht (der Zeiger zeigt auf einen zufälligen Speicherbereich)... wie wär's also, vorher eine zu erstellen..?
nico
Beiträge: 16
Registriert: 27. April 2009 21:42

Beitrag von nico »

Danke für Antwort.

Ja, mir fehlen die Grundlagen... :cry:
Eine Instanz erstelle ich doch so, oder:

Code: Alles auswählen

Tagebuch *tb = new Tagebuch();
E: Das gleiche Problem wie vorher. Ist das doch falsch instanziert?

E2: Problem gelöst, indem ich mein Widget nicht zu einem Widget, sondern zu einem Layout hinzufüge. Danke für deine Hilfe.
Antworten