我想动态更改 QMainWindow 中的 QWidget。因此,旧的小部件(如果存在)将被删除,一个新的小部件将被构建并添加到主窗口。小部件 (_visualization) 是一个 QMainWindow 本身,它包含一个菜单栏和一个显示 OSG 场景图的小部件。如果我不调用show()
新的小部件,我只会看到菜单栏,而看不到场景图。
我的目标是show()
在用户单击按钮时调用。该按钮与外部 QMainWindow (MyQMainWindow) 相连。
不幸的是,当我show()
在 connected 方法中调用 _visualization 时,将不会显示场景图。loadVisualization(...)
与此相反,如果我在构造方法 ( )中调用它,将显示场景图。
MyQMainWindow::MyQMainWindow(QWidget *parent ) :
QMainWindow(parent) {
...
loadVisualization(...);
connect(_ui->nextButton, SIGNAL(clicked()), this, SLOT(showNext()));
...
}
void MyQMainWindow::loadVisualization(QString filePath) {
if (_visualization) {
_heightWidgetLayout->removeWidget(_visualization);
delete _visualization;
}
_visualization= new HeightVisualization(0, filePath);
_visualization->setParent(_mainWindowWidget);
_heightWidgetLayout->addWidget(_visualization);
//_visualization->show(); // will work here
}
void MyQMainWindow::showNext() {
_visualization->show(); // does not work here!
}
我知道 QT 会调用setVisible(...)
小部件。该方法首先测试 QT ( testAttribute(Qt::WA_WState_ExplicitShowHide) && !testAttribute(Qt::WA_WState_Hidden)
) 中的一些状态。如果我调用 show() in showNext()
,这些测试会导致返回而不做任何更改。
是连接器和插槽的问题吗?当用户单击按钮时,是否有可能显示小部件?