Search code examples
qtqstackedwidget

why opening 2 windows?


My QT application is opening two windows. One empty and one with the button1 showing. Could someone tell me why?

I've tried everything, but I can't find the source of the problem. If anyone can help me.

main.cpp

#include <QtWidgets>
#include "./mainwindow.h"

int main(int argc, char **argv)
{
    QApplication app (argc, argv);
    MainWindow myWindow;
    myWindow.show();
    return app.exec();
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStackedWidget>


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QtWidgets>

MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
{
    QWidget *page1 = new QWidget();
    QWidget *page2 = new QWidget();
    QGridLayout *layout = new QGridLayout();
    QGridLayout *layout1 = new QGridLayout();
    QPushButton *button = new QPushButton("Página 1", page1);
    QPushButton *button1 = new QPushButton("Página 2", page2);
    button->show();
    button1->show();
    layout->addWidget(button, 0, 0);
    layout1->addWidget(button1, 0, 0);
    page1->setLayout(layout);
    page2->setLayout(layout1);
    layout->setColumnMinimumWidth(0, 30);
    QStackedWidget *mainContainer = new QStackedWidget(parent);
    mainContainer->addWidget(page1);
    mainContainer->addWidget(page2);
    mainContainer->setCurrentIndex(1);
}

Solution

  • I think it comes from this line:

    QStackedWidget *mainContainer = new QStackedWidget(parent);
    

    You should give this instead of parent for the QStackedWidget, because the parent of your MainWindow is null, and you probably want your StackWidget to be included in your MainWindow I guess.

    Also, you should probably set your main container as the central widget of the main window. Something like this should work:

    QWidget *page1 = new QWidget(this);
    QWidget *page2 = new QWidget(this);
    QGridLayout *layout = new QGridLayout(page1);
    QGridLayout *layout1 = new QGridLayout(page2);
    QPushButton *button = new QPushButton("Página 1", page1);
    QPushButton *button1 = new QPushButton("Página 2", page2);
    layout->addWidget(button, 0, 0);
    layout1->addWidget(button1, 0, 0);
    layout->setColumnMinimumWidth(0, 30);
    QStackedWidget *mainContainer = new QStackedWidget(this);
    mainContainer->addWidget(page1);
    mainContainer->addWidget(page2);
    mainContainer->setCurrentIndex(1);
    setCentralWidget(mainContainer);