Qt5 Connect Custom WindowЗакрыть сигнал к другому окну

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

AdministrativeWindow.h

class AdministrativeWindow : public QMainWindow
{
Q_OBJECT

public:
explicit AdministrativeWindow(QWidget *parent = 0);
~AdministrativeWindow();

private slots:
void on_actionExit_Administrative_Window_triggered();

private:
Ui::AdministrativeWindow *ui;

signals:
void windowClose();
};

AdministrativeWindow.cpp

void AdministrativeWindow::on_actionExit_Administrative_Window_triggered()
{
emit windowClose();
close();
}

mainwindow.cpp

connect(adminWindow, SIGNAL(windowClose()), this, SLOT(adminWindowClose()));

void MainWindow::on_ConfigureUsersBtn_clicked()
{
if(adminWindow == NULL)
{
adminWindow = new AdministrativeWindow();
adminWindow->show();
}
else if(adminWindow->isVisible())
{
adminWindow->activateWindow();
adminWindow->showNormal();
}
else
{
adminWindow->show();
}
}

void MainWindow::on_adminWindowClose()
{
delete adminWindow;
adminWindow = NULL;
}

1

Решение

Вы должны убедиться, что вы используете действительный adminWindow указатель на соединение:

void MainWindow::on_ConfigureUsersBtn_clicked()
{
if(adminWindow == NULL)
{
adminWindow = new AdministrativeWindow();
connect(adminWindow, SIGNAL(windowClose()), this, SLOT(adminWindowClose()));
adminWindow->show();
}
0

Другие решения

не забудьте выполнить подключение после инициализации указателя

connect(adminWindow, SIGNAL(windowClose()), this, SLOT(adminWindowClose()));
^
valid ptr

также частные слоты являются частными, если они называются обычными функциями-членами, но всегда общедоступны для соединения. Я думаю, что это более чистый дизайн, чтобы определять слоты как публичные, так как их целью является общение и использование частных функций как обычно, когда они необходимы, если вам действительно не нужна такая смешанная концепция, как private slot (это может существовать, однако, и можно представить некоторые особые обстоятельства, в которых это могло бы иметь смысл, я предполагаю, что это не тот случай)

0

По вопросам рекламы [email protected]