Qt 按下按钮后显示QWidget

Qt 按下按钮后显示QWidget,qt,qwidget,openscenegraph,Qt,Qwidget,Openscenegraph,我想动态更改QMainWindow中的QWidget。因此,旧的小部件(如果存在)将被删除,新的小部件将被构造并添加到主窗口中。 小部件(_visualization)本身是一个QMainWindow,它包含一个菜单栏和一个显示OSG场景图的小部件。 如果我没有在新的小部件上调用show(),我将只看到菜单栏,而不会看到场景图 我的目标是在用户单击按钮时调用show()。该按钮与外部QMainWindow(MyQMainWindow)连接 不幸的是,当我在connected方法中调用可视化上的s

我想动态更改QMainWindow中的QWidget。因此,旧的小部件(如果存在)将被删除,新的小部件将被构造并添加到主窗口中。 小部件(_visualization)本身是一个QMainWindow,它包含一个菜单栏和一个显示OSG场景图的小部件。 如果我没有在新的小部件上调用
show()
,我将只看到菜单栏,而不会看到场景图

我的目标是在用户单击按钮时调用
show()
。该按钮与外部QMainWindow(MyQMainWindow)连接

不幸的是,当我在connected方法中调用可视化上的
show()
时,场景图将不会显示。与此相反,如果我在构造函数方法(
loadVisualization(…)
)中调用它,则将显示场景图

我知道QT将在小部件上调用
setVisible(…)
。此方法首先测试QT(
testAttribute(QT::WA\u WState\u ExplicitShowHide)和&!testAttribute(QT::WA\u WState\u Hidden)
)中的一些状态。如果我在
showNext()
中调用show(),这些测试将导致返回而不做任何更改


连接器和插槽是否有问题?当用户单击按钮时,是否有可能显示小部件?

我学到的是,使用stackedWidget很容易

然后,您可以使用以下命令以编程方式对其进行更改

currentPageIndex = (currentPageIndex + 1) % 3;
ui->stackedWidget->setCurrentIndex(0);

3可以是堆栈小部件中的总页面。您可以使用currentPageIndex,也可以使用页面ID创建一些常量,就像我对0所做的那样。

如果要在QMainWindow中显示某些内容,需要通过QMainWindow::setCentralWidget()将其设置为中心小部件。
currentPageIndex = (currentPageIndex + 1) % 3;
ui->stackedWidget->setCurrentIndex(0);