为什么要打开 2 windows?
why opening 2 windows?
我的 QT 应用程序正在打开两个 windows。一个是空的,一个是显示 button1 的。谁能告诉我为什么?
我什么都试过了,还是找不到问题的根源。如果有人可以帮助我。
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);
}
why opening 2 windows?
在 QT 中,按钮是小部件,小部件可以在它们自己的 window 中显示为独立对象,例如通过调用方法 show()
就像您在 button->show();
和 button1->show();
如果您对主要 window 使用 QWidget::show()
方法,则不需要对所有 UI 对象(如按钮、列表小部件、行编辑等)使用此方法
我认为它来自这一行:
QStackedWidget *mainContainer = new QStackedWidget(parent);
您应该为 QStackedWidget 提供 this
而不是 parent
,因为您的 MainWindow 的父级为空,我猜您可能希望 StackWidget 包含在您的 MainWindow 中。
此外,您可能应该将主容器设置为主 window 的中央小部件。
这样的事情应该有效:
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);
显示多个 windows 的原因是因为 parent
设置为 nullptr
,这意味着 MainWindow
class 和QStackedWidget
实例是顶级小部件。
如果你想让QStackWidget
成为主部件的子部件,你需要给它一个父部件,最合适的是中央部件。
更改代码的以下行:
QStackedWidget *mainContainer = new QStackedWidget(centralWidget());
我的 QT 应用程序正在打开两个 windows。一个是空的,一个是显示 button1 的。谁能告诉我为什么?
我什么都试过了,还是找不到问题的根源。如果有人可以帮助我。
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);
}
why opening 2 windows?
在 QT 中,按钮是小部件,小部件可以在它们自己的 window 中显示为独立对象,例如通过调用方法 show()
就像您在 button->show();
和 button1->show();
如果您对主要 window 使用 QWidget::show()
方法,则不需要对所有 UI 对象(如按钮、列表小部件、行编辑等)使用此方法
我认为它来自这一行:
QStackedWidget *mainContainer = new QStackedWidget(parent);
您应该为 QStackedWidget 提供 this
而不是 parent
,因为您的 MainWindow 的父级为空,我猜您可能希望 StackWidget 包含在您的 MainWindow 中。
此外,您可能应该将主容器设置为主 window 的中央小部件。 这样的事情应该有效:
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);
显示多个 windows 的原因是因为 parent
设置为 nullptr
,这意味着 MainWindow
class 和QStackedWidget
实例是顶级小部件。
如果你想让QStackWidget
成为主部件的子部件,你需要给它一个父部件,最合适的是中央部件。
更改代码的以下行:
QStackedWidget *mainContainer = new QStackedWidget(centralWidget());