QStack Widget 从第 1 页导航到第 2 页
Posted
技术标签:
【中文标题】QStack Widget 从第 1 页导航到第 2 页【英文标题】:QStackWidget navigate from page1 to page 2 【发布时间】:2018-03-31 04:11:38 【问题描述】:我有一个基类 MainWindow
继承自 QMainWindow
。
MainWindow
在其 Ui 文件中有 QSTackedWidget
。我在不同的类中有Page1
和Page2
所有页面小部件都有从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 页?