【问题标题】:How to hide and show MainWindow?如何隐藏和显示主窗口?
【发布时间】:2021-07-25 15:54:00
【问题描述】:

我正在创建一个有两个 MainWindow 的应用程序。 单击按钮后,将显示第二个 MainWindow。但是如果在第一个按钮的代码中我给hide()MainWindow1,我就不能再发送了。

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    hide();
    two = new MainWindow2 (this);
    two -> show();

}



#include "mainwindow2.h"
#include "ui_mainwindow2.h"
#include "mainwindow.h"

MainWindow2::MainWindow2(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow2)
{
    ui->setupUi(this);
}

MainWindow2::~MainWindow2()
{
    delete ui;
}

void MainWindow2::on_pushButton_clicked()
{

    MainWindow w;
    w.show();
}

【问题讨论】:

  • MainWindow w; w.show(); 注意这里的w 是一个局部变量,它的生命周期在作用域的末尾结束,这意味着当on_pushButton_clicked() 结束时w 不再存在。

标签: c++ qt show-hide


【解决方案1】:

考虑下面的代码...

void MainWindow2::on_pushButton_clicked()
{

    MainWindow w;
    w.show();
}

MainWindow 实例 w 是函数的本地实例,一旦超出范围就会被销毁。

您的意图(至少对我而言)有点不明确,但我猜您希望 MainWindow2::on_pushButton_clicked 重新显示原始的 MainWindow。如果是这样,那么你可以简单地做......

void MainWindow2::on_pushButton_clicked ()
{
    if (auto *w = parentWidget())
        w->show();
}

因为当前MainWindow2 实例是使用原始MainWindow 作为其父级创建的。

【讨论】:

  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多