Qt испускает сигнал из класса в класс

Я попытался передать пользовательский сигнал login () из моего класса loginmanager в главное окно. Сигнал подается в слот loginButtonClicked, и, насколько я понимаю, в механизме сигнал / слот он должен быть в состоянии перехватить любое событие, инициированное сигналом, и «найти» соответствующий слот для выполнения. Но это не работает, как я думаю.

Функция connect возвращает 1, что означает, что она может быть реализована в файле moc, и она работает, если я запускаю m_LoginManager-> setLogin (), которая запускает сигнал login ().

Но я предпочитаю, чтобы сигнал испускался loginButton и передавался в главное окно для обработки (в данном случае init ()).

Пожалуйста, поправьте меня, если я ошибаюсь.

Ниже приведен код.

loginmanager.cpp

LoginManager::LoginManager(QWidget * parent) : QWidget(parent)
{
ui.setupUi(this);

connect(ui.loginButton, SIGNAL(clicked()), this, SLOT(loginButtonClicked());
}

LoginManager::~LoginManager()
{

}

void LoginManager::setLogin()
{
emit login();
}

void LoginManager::loginButtonClicked()
{
setLogin();
}

loginmanager.hpp

#include <QWidget>
#include "ui_loginmanager.h"
class DatabaseManager;
class SettingManager;

class LoginManager : public QWidget
{
Q_OBJECT

public:
LoginManager(QWidget * parent = Q_NULLPTR);
~LoginManager();

void setLogin();

signals:
void login();

public slots:
void loginButtonClicked();

private:
Ui::LoginManager ui;
};

mainwindow.hpp

#include <QtWidgets/QMainWindow>
#include "ui_safeboxmanager.h"
class SafeboxManager : public QMainWindow
{
Q_OBJECT

public:
SafeboxManager(QWidget *parent = 0);
~SafeboxManager();

public slots:
void init();

private:
Ui::SafeboxManagerClass ui;
LoginManager*       m_LoginManager;
};

#endif // SAFEBOXMANAGER_H

mainwindow.cpp

#include "safeboxmanager.hpp"#include "loginmanager.hpp"
SafeboxManager::SafeboxManager(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);

m_LoginManager = new LoginManager();

ui.mainToolBar->setEnabled(false);
ui.tableWidget->setEnabled(false);

connect(m_LoginManager, SIGNAL(login()), this, SLOT(init()));

//m_LoginManager->setLogin() << this work
}

SafeboxManager::~SafeboxManager()
{

}

void SafeboxManager::init()
{
ui.mainToolBar->setEnabled(true);
ui.tableWidget->setEnabled(true);
}

-1

Решение

Объекты SafeboxManager и LoginManager должны существовать достаточно долго. Проверьте время жизни.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector