QStackWidget从第1页导航到第2页

时间:2018-03-31 04:11:38

标签: c++ qt qt5 qwidget qstackedwidget

我有一个继承自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();  
}

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

1 个答案:

答案 0 :(得分:0)

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

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

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();
}