QStack Widget 从第 1 页导航到第 2 页

Posted

技术标签:

【中文标题】QStack Widget 从第 1 页导航到第 2 页【英文标题】:QStackWidget navigate from page1 to page 2 【发布时间】:2018-03-31 04:11:38 【问题描述】:

我有一个基类 MainWindow 继承自 QMainWindowMainWindow 在其 Ui 文件中有 QSTackedWidget。我在不同的类中有Page1Page2 所有页面小部件都有从QWidget 派生的单独类。

QMainWindow 在一个类中实现QStackedWindow。堆叠小部件内的所有其他页面都是添加的类,并且都有自己的 .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();  

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

【问题讨论】:

我纠正了一个错字。 如果您从问题的陈述开始,您的问题会更清楚,并给出一个有助于其他人诊断问题的代码的最小完整示例 (***.com/help/mcve)。 我很抱歉..是***的新手。 【参考方案1】:

不必在MainWindow中进行更改,您可以从页面中进行更改。

当您将一个小部件插入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();

【讨论】:

我需要向 Mainwindow.cpp 发送信号以将 index 更改为 1 。但是使用 new 运算符它会打开 Page2 作为新的弹出窗口,而不是从父窗口切换到第 2 页 @Rubina 为什么要把它发送到 MainWindow ?,你试过我的解决方案了吗? MainWindow 有 QStackedWidget 并且里面有所有页面,所以我需要向 Mainwindow 发送信号来来回交换 @Rubina 我添加了另一个可能的解决方案: 我试过你的解决方案。从第 1 页移动到第 2 页效果很好,但从第 2 页到第 3 页或从第 2 页到第 1 页变得无响应

以上是关于QStack Widget 从第 1 页导航到第 2 页的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 navigator.pop 刷新或重新加载页面...比如第 1(nav.push=>2)页面到第 2 页,然后从第 2(nav.pop,值)返回到第 1 页?

如何使用localstorage / ajax jquery从第一页到第二页获取单选按钮值

如何通过单击主页中的按钮将数据从第二页传输到第三页

word中怎么从第三页设置页码的两种方法

怎么使word的页码从第三页开始

如何在颤动中拦截AppBar中的后退按钮