Qt: Buttons im Layout nicht sichtbar



  • Hallo, ich mache meine ersten Gehversuche mit Qt und bin schon das erste Mal hingefallen.

    Ich möchte ganz einfach ein Fenster mit zwei Buttons nebeneinander und zwar mit Benutzung eines QHBoxLayout. Ich benutze QtCreator aber nicht QtDesigner. Die Qt Version ist 4.8.1.

    So sieht mein Code aus, der auch einwandfrei kompiliert:

    #include <QtGui/QApplication>
    #include "mainwindow.h"
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        MainWindow Window;
    
        QHBoxLayout *ButtonsLayout = new QHBoxLayout;    
        QPushButton *DeleteButton = new QPushButton;
        QPushButton *DownloadButton = new QPushButton;
    
        ButtonsLayout->addWidget(DeleteButton);
        ButtonsLayout->addWidget(DownloadButton);
    
        DeleteButton->setText("Loeschen");
        DownloadButton->setText("Download");
        Window.setLayout(ButtonsLayout);
        Window.setWindowTitle("Warum sind keine Buttons zu sehen?");
        Window.show();
        return app.exec();
    }
    

    Was ich zu sehen bekomme ist allerdings nur ein leeres Fenster mit dem Titel "Warum sind keine Buttons zu sehen?". Ich habe auch schon Dinge wie

    DeleteButton->show();
    

    oder

    DeleteButton->setVisible(true);
    

    probiert. Das führte jedoch nur dazu, dass sich ein weiteres Fenster mit nur diesem Button öffnete.

    Vielen Dank schonmal im Voraus für eure Hilfe!



  • Mr Train schrieb:

    der auch einwandfrei kompiliert:

    Ist das extra erwähnenswert???

    Ein QMainWindow braucht ein Central Widget. Also ein Widget erstellen, dem Widget dein Button Layout zuweisen und dann auf dem Main Windows setCentralWidget aufrufen.



  • Mechanics schrieb:

    Mr Train schrieb:

    der auch einwandfrei kompiliert:

    Ist das extra erwähnenswert???

    😉

    Danke, so funktionierts! Da finde ich es allerdings praktischer, gleich QWidget statt QMainWindow als Hauptfenster zu verwenden.



  • Mr Train schrieb:

    Da finde ich es allerdings praktischer, gleich QWidget statt QMainWindow als Hauptfenster zu verwenden.

    Also, wenn ein QWidget reicht, dann nimm doch kein QMainWindow. Wenn ein char const* reicht, nimmst du doch auch keinen std::string, oder?
    Das mit dem centralWidget() ist deshalb nötig, weil QMainWindow sein eigenes Layout besitzt, in das die ganzen Menüs, ToolBars, DockWidgets, ... gelegt werden. Dadurch schlägt setLayout() fehl - MainWindow hat schon eines, was dir auch unmissverständlich in der Konsole ausgegeben wird.


Anmelden zum Antworten