无法从MainWindow打开Widget

时间:2014-12-23 03:20:46

标签: c++ qt qwidget

我想从MainWindow打开一个Widget。我认为这很容易,我读过的所有教程都是这样的:

void MainWindow::on_pushButton_Types_clicked()
{
    m_typesWin = new TypesWindow(m_db, this);
    m_typesWin->show();
    this->hide();
}

然而,这只适用于我,如果我没有通过"这个"进入构造函数。当我添加"这个"对于构造函数,我没有看到小部件,程序就停止了。如果我不隐藏"这个",那么我可以看到我的小部件的部分实际上在我的主窗口中。我不明白为什么。

编辑:这些类是由QtCreator自动创建的,所以它们应该没问题。

2 个答案:

答案 0 :(得分:1)

如果要将QWidget显示为窗口,则不应为该窗口小部件指定父窗口小部件。这里,因为您将主窗口指定为TypesWindow的父级,所以TypesWindow将嵌入主窗口中。因此,当您隐藏主窗口时,嵌入在主窗口中的TypesWindow也会被隐藏。

由于您希望TypesWindow是一个单独的窗口,因此不要将Parent小部件传递给TypesWindow构造函数中的QWidget构造函数。如果要从TypesWindow访问主窗口,可以将主窗口指针存储在TypesWindow的指针字段中。

答案 1 :(得分:0)

要从新的Qwidget打开主窗口,请执行以下操作:

1)在NEWWIDGET.CPP中:

QWidget *w;

NEWWIDGET::NEWWIDGET(QWidget *parent,QWidget *win) :
  QWidget(parent),
  ui(new Ui::NEWWIDGET)
{
  ui->setupUi(this);
  w=win;
}

..

void NEWWIDGET::on_pushButton_clicked()
{
  this->hide();
  w->show();
}

2)在NEWWIDGET.H

public:
    explicit NEWWIDGET(QWidget *parent=nullptr,QWidget *win=nullptr);
    ~NEWWIDGET();