QStackedWidget 从第 1 页导航到第 2 页

QStackWidget navigate from page1 to page 2

我有一个继承自 QMainWindow 的基础 class MainWindowMainWindow 在其 Ui 文件中有 QSTackedWidget。我在不同的 classes 中有 Page1Page2 那里的所有页面小部件都是从 QWidget.

派生的单独的 classes

QMainWindowQStackedWindow 合二为一 class。堆叠小部件内的所有其他页面都添加了 classes 并且都有自己的 .ui 填充按钮

我实现了

Page1* page1obj = new Page1;
Page2* page2obj = new Page2;



ui->stackedWidget->insertWidget(0,page1obj);   
ui->stackedWidget->insertWidget(1,page2obj);

它有一个 ui 文件,其中有下一个按钮 。单击它应该转到第 2 页;

Page1.cpp

connect(m_ui>nextButton,&QPushButton::clicked,this,&Page1::onclicked);      

void Page1::onclicked()
{

    Mainwindow* obj = new MainWindow;
    obj->openPage2();  
}

问题在于单击按钮会打开一个新的 window,而不是堆叠格式的单个 window。我哪里错了??如何解决这个问题?

不必在主窗口中进行更改,您可以在页面中进行更改。

当您将小部件插入 QStackedWidget 时,它被设置为父小部件,因此我们可以使用 parentWidget() 方法访问 QStackedWidget

void Page1::onclicked()
{
    QStackedWidget *stack = qobject_cast<QStackedWidget* >(parentWidget());
    if(stack)
        stack->setCurrentIndex(1);
}

更新:

如果你想使用 MainWindow,你不必创建 MainWindow,而是使用亲子关系访问它,最后进行转换

mainwindow
└── stackedwidget
    ├── page1
    └── page2

void Page1::onclicked()
{
    MainWindow *mainwindow = qobject_cast<MainWindow* >(parentWidget()->parentWidget());
    if(mainwindow)
        mainwindow->openPage2();
}