Я сделал свое приложение доступным для сценариев, создав производный класс QThread, в который я добавляю несколько классов QObject, чтобы получить доступ к их функциям через командную строку.
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));
}
После вызова run () класс входит в бесконечный цикл, используя m_scriptEngine для оценки каждой введенной командной строки.
В моем (упрощенном) основном я делаю:
simuCLI cli;
simuCore core;
cli.addObject(&core, "core");
simuUI ui;
connect(&ui, SIGNAL(start()), &core, SLOT(start()));
Но когда я вызываю start () из своего графического интерфейса и из своего скрипта, результаты разные
Моя архитектура приложения выглядит следующим образом:
Ядро -> StateMachine -> Машина -> Связь
Запуск из пользовательского интерфейса отлично работает.
Запустить из командной строки выполнить код, но не запускать QStateMachine, и он испускает сигналы, но никогда их не получает.
Communication
отправляет команды Machine
, испуская сигналы, полученные в Machine
. Он работает, если я вызываю 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;
}
Выход:
start () из пользовательского интерфейса:
wl cst
no card
start () из командной строки:
wl cst
Как видите, конечный автомат никогда не входит в свое первое состояние, как и никогда не запускается.
Итак, мои вопросы:
1 - В каком потоке выполняется start (), если я вызываю его из командной строки?
2 - Как я могу отлаживать сигналы? (лучший ответ, который я нашел)
3 - Есть ли способ увидеть каждое соединение сигналов в момент t при выполнении
4 - Как я могу узнать, в каком потоке я нахожусь в процессе выполнения?
5. У вас есть идеи, почему мой код не работает только тогда, когда я использую командную строку?