为什么要打开两扇窗户



我的QT应用程序正在打开两个窗口。一个是空的,另一个显示了按钮1。有人能告诉我为什么吗?

我什么都试过了,但找不到问题的根源。如果有人能帮我的话。

main.cpp

#include <QtWidgets>
#include "./mainwindow.h"
int main(int argc, char **argv)
{
QApplication app (argc, argv);
MainWindow myWindow;
myWindow.show();
return app.exec();
}

主窗口.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

主窗口.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);
}

我认为它来自这一行:

QStackedWidget *mainContainer = new QStackedWidget(parent);

您应该为QStackedWidget指定this而不是parent,因为MainWindow的父级为null,我想您可能希望您的StackWidget包含在MainWindow中。

此外,您可能应该将主容器设置为主窗口的中心小部件。像这样的东西应该起作用:

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);

为什么要打开两个窗口?

在QT按钮是小部件,小部件可以在自己的窗口中显示为独立对象,例如,通过调用方法show(),就像在button->show();button1->show();中所做的那样

显示多个窗口的原因是parent设置为nullptr,这意味着MainWindow类和QStackedWidget实例都是顶级窗口小部件。

如果你想让QStackWidget成为主小部件的子部件,你需要给它一个父小部件,最合适的是中央小部件。

更改代码的以下行:

QStackedWidget *mainContainer = new QStackedWidget(centralWidget());

如果您对主窗口使用QWidget::show()方法,则不需要对按钮、列表小部件、行编辑等所有UI对象使用此方法。

相关内容

  • 没有找到相关文章

最新更新