Qt - Закрыть подменю с сигналом / слотом
У меня есть главное окно Qt, где я вызываю другое окно, фактически своего рода подменю, которое содержит параметры для первого; Вот часть этого главного окна:
void Ui_MainWindow::createSignals()
{
connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(ICMenu()));
}
void Ui_MainWindow::ICMenu()
{
qmenu = new QMainWindow;
DiskMenu = new Ui_DiskGalMenu;
DiskMenu->setupUi(qmenu,this);
setInitialDiskMenuPosition(qmenu, this);
qmenu->show();
}
Как видите, я вызываю другое QMainwindow ("qmenu
") вот код этого нового окна (тип которого"Ui_DiskGalMenu
"):
void Ui_DiskGalMenu::createMenuSignals()
{
connect(pushButton_4, SIGNAL(clicked()), this, SLOT(closeMenu()));
}
void Ui_DiskGalMenu::closeMenu()
{
close(true);
}
После установки параметров в этом подменю, я хотел бы закрыть его кнопкой (здесь "pushButton_4
").
Моя проблема в том, что когда я нажимаю "pushButton_4", это окно не закрывается.
Я также пытался переопределить closeEvent
но без успеха.
Любая помощь будет отличной
1 ответ
Этот вызов функции выглядит как ошибка:
close(true);
QWidget::close() не принимает никаких параметров. Итак, что вы здесь делаете, это вызываете функцию close (int) библиотеки C (для закрытия файловых дескрипторов). bool
неявно преобразуется в int
Итак, вы в конечном итоге с этим вызовом:
::close(1);
Который (вероятно) закрывается stderr
,
Вы можете увидеть, что происходит, если вы измените вышеприведенное на:
this->close(true);
Вы должны получить ошибку компиляции, так как такой функции не существует. Таким образом, правильный вызов был бы:
this->close();
Однако QWidget::close() уже является слотом, так что вам вообще не нужна функция Ui_DiskGalMenu::closeMenu(). Все, что вам нужно, это подключиться к слоту close () для начала:
connect(actionDisk_galaxy, SIGNAL(triggered()), this, SLOT(close()));
Если вам нужно сделать больше вещей, когда окно закроется, вы можете переопределить closeEvent(), который будет вызываться до закрытия окна.