Я пишу программу на QT, которая в настоящее время имеет класс GameEngine
(обработка данных) и класс MainWindow
(GUI).
Отдельные экземпляры классов GameEngine
и MainWindow
принадлежат функции int main
.
Экземпляр MainWindow
имеет кнопку User Action
, которая откроет экземпляр класса QDialog с именем Dialog_UserAction
. Экземпляр этого QDialog принадлежит MainWindow
, который также является родителем QDialog (для отключения графического интерфейса пользователя MainWindow
, когда экземпляр Dialog_UserAction
открыт).
Моя проблема в том, что многие события (сигналы) должны быть связаны между QDialog и экземпляром GameEngine
.
Есть ли какой-нибудь простой способ, которым я могу этого достичь?
Я уже пробовал перенаправить сигналы с Dialog_UserAction
на GameEngine
через MainBoard
и наоборот. Это работает, но это довольно грязное решение для этой задачи.
Я также пытался разрешить владение Dialog_UserAction
Main
, но я не знаю, как реагировать на User Action Button clicked
событие в главном контексте.
Наконец, я также попытался разрешить владение Dialog_UserAction
экземпляром GameEngine
, что было бы простым решением (за исключением того, что графический интерфейс MainBoard
не будет отключен, пока открыт Dialog_UserAction
). Но я бы действительно предпочел, чтобы все связанные с GUI экземпляры не попадали в контекст GameEngine
.
GameEngine.h:
class GameEngine : public QObject
{
Q_OBJECT
signals:
void someSignalToDialog(void);
public slots:
void on_someSignalFromDialog();
}
Dialog_UserAction.h:
class Dialog_UserAction: public QObject
{
Q_OBJECT
signals:
void someSignalToGameEngine(void);
public slots:
void on_someSignalFromGameEngine();
}
main.cpp:
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QApplication::setWindowIcon(QIcon(":/images/MageKnightLogo.jpg"));
GameEngine gameEngine;
Window_MainBoard mainBoard;
mainBoard.showFullScreen();
return a.exec();
}
MainBoard.cpp:
#include "Dialog_UserAction.h"
...
void Window_MainBoard::on_pushButton_enterUserAction_clicked() {
Dialog_UserAction actionDialog(this);
// connect signals and slots here?
if (actionDialog.exec() == QDialog::Accepted)
{
// Send signal with data to GameEngine
}
}
...
Итак, я действительно спрашиваю:
Есть ли какой-нибудь простой способ, которым я могу настроить соединения сигнальных слотов в этой настройке, где я могу соединить Dialog_UserAction
с GameEngine
без пересылки сигналов в контексте MainBoard
?
Если нет, есть ли у вас какие-либо предложения о том, как я мог бы подойти к этому лучше вообще? Заранее спасибо.