按下按钮后显示QWidget

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

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

不幸的是,当我在连接方法的_visualization中调用show()时,场景图不会显示。 与此相反,如果我在构造方法( 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) )。 如果我在showNext()调用show(),这些测试会导致返回而不会发生任何变化。

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


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

然后你可以通过编程来改变它

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

3可以是你的堆栈部件中的全部页面。 你可以使用currentPageIndex,或者你可以用页面id创建一些常量,就像我用0所做的那样。

链接地址: http://www.djcxy.com/p/39295.html

上一篇: Show a QWidget after pressing a button

下一篇: QStackedWidget navigation from page to page