Neue Widgets im CentralWidget öffnen

Alles rund um die Programmierung mit Qt
Antworten
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Neue Widgets im CentralWidget öffnen

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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?
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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?
Exasperation
Beiträge: 186
Registriert: 11. März 2009 18:00
Wohnort: VS

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Oder new und delete bzw. QObject::deleteLater()
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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.
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag von 101 »

Wie wäre es mit QStackedWidget?
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Joont
Beiträge: 28
Registriert: 14. Juli 2010 10:18
Kontaktdaten:

Beitrag 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.
Antworten