我有一个继承自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();
}
问题是点击按钮打开一个新窗口,而不是堆叠格式的单个窗口。我哪里错了?如何解决这个问题?
答案 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();
}