我的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对象使用此方法。