我想从MainWindow打开一个Widget。我认为这很容易,我读过的所有教程都是这样的:
void MainWindow::on_pushButton_Types_clicked()
{
m_typesWin = new TypesWindow(m_db, this);
m_typesWin->show();
this->hide();
}
然而,这只适用于我,如果我没有通过"这个"进入构造函数。当我添加"这个"对于构造函数,我没有看到小部件,程序就停止了。如果我不隐藏"这个",那么我可以看到我的小部件的部分实际上在我的主窗口中。我不明白为什么。
编辑:这些类是由QtCreator自动创建的,所以它们应该没问题。
答案 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();