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(), который будет вызываться до закрытия окна.

Другие вопросы по тегам