0

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

我已经尝试了一切,但我找不到问题的根源。如果有人可以帮助我。

主文件

#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);
}
4

4 回答 4

1

我认为它来自这一行:

QStackedWidget *mainContainer = new QStackedWidget(parent);

你应该给QStackedWidgetthis而不是parentQStackedWidget,因为你的 MainWindow 的父级是空的,我猜你可能希望你的 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);
于 2020-07-13T13:50:23.933 回答
0

为什么要开2个窗户?

在 QT 中,按钮是小部件,小部件可以通过调用例如show()您在 button->show();button1->show();

于 2020-07-13T06:22:29.780 回答
0

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

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

更改代码的以下行:

QStackedWidget *mainContainer = new QStackedWidget(centralWidget());
于 2020-07-13T13:54:49.740 回答
-1

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

于 2020-07-13T11:59:43.367 回答