私はloginmanagerクラスからmainwindowにカスタムシグナルlogin()を送出しようとしました。シグナルはloginButtonClickedスロットで発生し、シグナル/スロットメカニズムについて理解しているならば、シグナルが発生したイベントをキャプチャし、対応するスロットが実行されるように見えるはずです。しかし、それは私が思ったようには機能しません。Qtクラスからクラスへシグナルを送信します
connect関数は1を返します。つまり、mocファイルに実装できることを意味し、login()シグナルを発生させるm_LoginManager-> setLogin()を実行すると動作します。
しかし、私が好むのは、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);
}
これは役に立ちます:http://stackoverflow.com/q/26422154/1421332 – Silicomancer
私はこれを読んだ。すべてをチェック(私は信じている)、問題は依然として残っています。私は直面している問題とまったく同じ問題について何人かの人に聞いたことがありますが、適切な解決策を得られませんでした。だから私はもう一度尋ねることにしました。他の人たちも助けてくれることを願っています。 – ReverseEngineer
コード内のconnect()戻り値を確認する必要があります。また、loginButtonClicked()定義にはクラス名がありません。 – Silicomancer