【问题标题】:Show a QWidget after pressing a button按下按钮后显示 QWidget
【发布时间】:2013-08-13 20:02:36
【问题描述】:

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

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

不幸的是,当我在connected方法中的_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(),这些测试会导致返回而没有任何变化。

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

【问题讨论】:

  • 如果你想在一个QMainWindow中显示一些东西,你需要通过QMainWindow::setCentralWidget()使它成为中心部件。

标签: qt qwidget openscenegraph


【解决方案1】:

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

然后你可以用这个以编程方式改变它

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-27
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多