Не удается открыть виджет из главного окна

Я хочу открыть виджет из моего главного окна. Я думал, что это легко сделать, и все учебники, которые я прочитал, делают это так:

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

Однако, это работает только для меня, если я не передам "это" в конструктор. Когда я добавляю "this" в конструктор, я не вижу виджет, программа просто останавливается. Если я не скрываю "это", то вижу, что части моего виджета фактически находятся в моем главном окне. Понятия не имею почему.

РЕДАКТИРОВАТЬ: Классы автоматически создаются QtCreator, поэтому они должны быть в порядке.

1 ответ

Решение

Если вы хотите, чтобы QWidget отображался как окно, родительский виджет не должен быть указан для этого виджета. Здесь, поскольку вы указываете главное окно в качестве родителя TypesWindow, TypesWindow становится встроенным в главное окно. Поэтому, когда вы скрываете главное окно, TypesWindow, встроенное в главное окно, также скрывается.

Поскольку вы хотите, чтобы TypesWindow было отдельным окном, не передавайте родительский виджет конструктору QWidget в конструкторе TypesWindow. Если вы хотите получить доступ к главному окну из TypesWindow, вы можете сохранить указатель главного окна в поле указателя в TypesWindow.

Чтобы открыть главное окно из нового 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();
Другие вопросы по тегам