파생 된 QThread 클래스를 작성하여 응용 프로그램을 스크립팅 가능하게 만들었습니다.이 클래스에서는 명령 줄을 통해 해당 함수에 액세스하기 위해 다중 QObject 클래스를 추가합니다. 실행() 호출 후 스레드 응용 프로그램에서 QtScript에서 호출 된 Qt 슬롯
void commandLine::addObject(QObject *obj, QString name)
{
QScriptValue sv = m_scriptEngine.newQObject(obj);
m_scriptEngine.globalObject().setProperty(name, sv);
qObjectMap.insert(std::pair<QString, QObject *>(name, obj));
}
이 클래스는 모든 명령 행 입력 평가 m_scriptEngine을 사용하여 무한 루프에 입력합니다.
simuCLI cli;
simuCore core;
cli.addObject(&core, "core");
simuUI ui;
connect(&ui, SIGNAL(start()), &core, SLOT(start()));
을하지만 내 GUI에서 내 스크립트에서() 시작을 호출 할 때, 결과의 differents은
내 응용 프로그램 아키텍처가 같다 : 내 (간체) 주에서
내가 할 다음
코어 -> 머신 (StateMachine) -> 시스템 -> 통신
UI에서 시작하는 것이 좋습니다.
명령 줄에서 시작하여 코드를 실행하십시오. 그러나 QStateMachine을 시작하지 마십시오. 신호를 방출하지만 결코 수신하지 않습니다.
Communication
은 Machine
에 수신 된 신호를 방출하여 Machine
으로 명령을 보냅니다. 그것은 내 UI에서 core :: start()를 호출하면 작동합니다 내 명령 줄 신호를 사용하여 core :: start()를 호출하면 신호가 나오지만 결코 수신되지 않습니다.
void WL::WL()
{
std::cout << "wl cst" << std::endl;
mLectMotStateMachine.setInitialState(sNoCard);
mLectMotStateMachine.start();
}
void WL::enterNoCard()
{
std::cout << "no card" << std::endl;
}
OUPUT : UI에서
시작() :
wl cst
no card
시작() 명령 줄에서 :
wl cst
당신이 볼 수 있듯이, 상태 머신 절대 진입하지 않는 것처럼 첫 번째 주에 입력하지 마십시오.
그래서 제 질문은 다음과 같습니다
1 - 느릅 나무 스레드에서 시작() 나는 명령 라인에서 그것을 호출하는 경우를 실행?
2 - 어떻게 신호를 디버깅 할 수 있습니까? (best answer I've found)
3 - 내가 실행 오전하는 스레드에서 알 수있는 방법 - 실행
4 시간 't'에서 모든 신호 연결을 볼 수있는 방법이 있습니까?
5 - 내 코드가 명령 줄을 사용할 때만 작동하지 않는 이유가 있습니까?
는, 특히 연결 시작하여 커넥트를 확인()을 활성화해야합니다. 추가 도움이 필요하면 우편 번호를 보내주십시오. –
나는 나의 포스트를 더 명백하게 편집했다. – MokaT