У меня есть простой исполняемый файл (english.exe
), который меняет Windows 'язык ввода на Engli sh. Я хочу запустить этот исполняемый файл, когда пользователь взаимодействует с различными компонентами GUI.
. Если я запускаю исполняемый файл в focusInEvent
из QLineEdit
, я получаю ожидаемое поведение: программа запускается, и нет никакой задержки.
void MyLineEdit::focusInEvent(QFocusEvent *e)
{
QLineEdit::focusInEvent(e);
QProcess * switchInput = new QProcess(this);
switchInput->start( "c:/english.exe");
}
Я хочу запустить аналогичный код при активации определенного виджета, для которого см. этот ответ . (На самом деле, я хотел бы использовать focusInEvent
для QWebEngineView
, но это исправленное сообщение об ошибке , несмотря на то, что событие никогда не вызывалось; я использую Qt 5.12.6.) Но со следующим код, GUI зависает.
bool MyWidget::event(QEvent *event)
{
bool result = QWidget::event(event);
if( event->type() == QEvent::WindowActivate )
{
// qDebug() << "QEvent::WindowActivate";
QProcess * switchInput = new QProcess(this);
switchInput->start( "c:/english.exe" );
}
return result;
}
Используя код qDebug()
, я получаю только одно сообщение "QEvent :: WindowActivate".
В чем разница между два звонка? Есть ли альтернативное решение?
Редактировать: Какое бы решение я не нашел, оно может не представлять общего интереса. Программа, которую я запускаю, представляет собой сценарий командной строки AutoHotKey (с содержимым PostMessage, 0x50, 0, 0x0409,, A
) (без вывода или взаимодействия с пользователем). Для сравнения я попытался запустить ipconfig.exe
(взять программу из командной строки наугад), и проблема исчезла. Поэтому должно быть что-то в скрипте AutoHotKey или в самом AutoHotKey.