Не удается открыть виджет из главного окна
Я хочу открыть виджет из моего главного окна. Я думал, что это легко сделать, и все учебники, которые я прочитал, делают это так:
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();