Seite 1 von 1

Neue Widgets im CentralWidget öffnen

Verfasst: 4. September 2010 13:32
von Joont
Hallo,

ich bin noch ziemlich neu im Umgang mit Qt und habe ein Problem das ich selbst nicht Lösen kann. Seid Wochen probiere ich nun schon herum. Ich habe schon die SuFU und Google genutzt jedoch nichts gefunden das mir helfen kann.
Nun zum Problem. Ich habe ein Haupfenster mit dem QT Designer erstellt. In diesem Fenster ist das Logo und ein button. Ich möchte jetzt gerne das wenn man auf den Button klickt das dann das Logo + der Button verschwindet und sich in einem neuen Widget das Menü öffnet. Das sollte aber alles in einem Fenster passieren. Ich hoffe mal das ihr mich verstanden habt. Hier mal noch der Code:

Die mainWindow.h

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui>
#include <QPushButton>
#include <QWidget>
#include "ui_mainwindow.h"

class MWindow : public QMainWindow,
private Ui::MainWindow
{
    Q_OBJECT
public:
    MWindow();
    ~MWindow() {}
protected slots:
    void info();
};


#endif // MAINWINDOW_H




Die mainWindow.cpp

Code: Alles auswählen

#include "mainWindow.h"

MWindow::MWindow()
{
setupUi(this);

//Die Signal und Slots verbindungen

connect ( actionBeenden, SIGNAL( triggered(bool) ),
          qApp, SLOT( quit() ));
connect ( action_ber_Happy_Quiz, SIGNAL ( triggered(bool) ),
          this, SLOT( info() ));

}

void MWindow::info()
{
    QMessageBox::information(
            0, tr("Über Happy Quiz:"),
            tr("Happy Quiz Version 1.0\n"
            "Programmierung bei Joont"));
}


und zu guter letzt die main.cpp

Code: Alles auswählen

#include "mainWindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MWindow window;
    window.show();

    return app.exec();
}


Vielleicht kann man mir das ein mal vor machen. Das wäre echt super wenn ihr mir helfen könnt. Ich danke euch schon mal im Vorraus.

Verfasst: 4. September 2010 13:50
von franzf
Es gibt bei den Qt-Tools ein noch viel besseres Programm als den Qt Designer. Das nennt sich "Qt Assistant". Damit kann man sich die Qt-Doku anschauen, und darin suchen.
Such also mal nach "QLayout" und dort "addWidget" und "removeWidget", in der von dir verwendeten QLayout-Klasse (z.B. QHBoxLayout, ...) findest du meist noch Funktionen wie "insertWidget" die auch ganz lustig sind.

Verwendest du ein QMainWindow kannst du auch einfach nur ein neues centralWidget setzen.

Und ein "Menu" kommt traditionellerweise in die menuBar, z.B. deines QMainWindow.

Verfasst: 4. September 2010 14:20
von Joont
Okay da habe ich auch schon mal gesucht. Mit dem Menü hast du Recht aber ich meine so was wie Start, Einstellungen etc. damit. Also ich komme da echt nicht weiter. Hast du vllt eine kleine Vorgabe das ich mir das mal genau anschauen kann?

Verfasst: 5. September 2010 21:20
von Joont
Hey,

mal eine andere Frage was mir schon einiges weiterhelfen kann. Wie schaffe ich es das neue Widgets erst nach button betätigung sichtbar sind und nicht schon beim Programm start?

Verfasst: 6. September 2010 06:58
von Exasperation
QWidget::show()
QWidget::hide()

Solltest dir auf jeden Fall mal gründlich die Doku, sowie Tutorials anschauen um ein bisschen fit zu werden.

Verfasst: 6. September 2010 09:04
von upsala
Oder new und delete bzw. QObject::deleteLater()

Verfasst: 9. September 2010 23:03
von Joont
Hey,

ich habe jetzt mal noch weiter gesucht und auch versucht jedoch bekomm ich es nicht gebacken leider. Jetzt mal ganz doof kann mir vllt jemand ein kleines Beispiel geben wie es geht? Zu mindest habe ich es schon mal hinbekommen das Widget verschwinden zu lassen auf Knopf druck. Aber es ist immer noch direkt bei Programm start da und ich kann auch nicht, das was ich ja vesuche, neue Widget auf knopfdruck escheinen lassen. Wäre wirklich super wenn mir einer einen anstoß geben könnte.

Verfasst: 20. September 2010 09:41
von 101
Wie wäre es mit QStackedWidget?

Verfasst: 20. September 2010 10:53
von padreigh
Pack dein StartLogo + Button in eine QGroupBox (startupBox).
Als Name gibst du der "" == kein Name.
Alles was danach angezeigt werden soll kommt auch in eine QGroupBox (danachBox). Ebenfalls namenlos!
Beide Groupboxen kommen in ein QVBoxLayout in dein MainWindow.

Dann connectest du den clicked() des Buttons mit dem hide() der startupBox und dem show() der danachBox. (das geht auch im designer ...)

Dann modifizierst du deinen MainWindow Konstruktor: nach dem setupUI(); kommt ein ein
ui->startupBox.show(); ui->danachBox.hide();

Das ist eine (dirty) von ca 5+ Möglichkeiten die mir so spontan einfällt ... statt QGroupBox könntest du auch myQWidgets oder was auch immer nehmen ...

alternativ such mal im Assistant nach QSplashScreen oder so ähnlich

Verfasst: 20. September 2010 21:26
von Joont
Hey,

danke für deine Antwort das hat mir sehr geholfen. Habe es nu hinbekommen. Wie gesagt brauchte nur einen Schupps. Danke noch mal.