qt - 为什么启动 QProcess 会冻结 QWidget 子类中的 GUI,但不会冻结 QLineEdit 子类中的 GUI?
问题描述
我有一个简单的可执行文件 ( english.exe
),可以将 Windows 的输入语言更改为英语。当用户与 GUI 的各种组件交互时,我想运行这个可执行文件。
focusInEvent
如果我在of中运行可执行文件QLineEdit
,我会得到预期的行为:程序运行,并且没有滞后。
void MyLineEdit::focusInEvent(QFocusEvent *e)
{
QLineEdit::focusInEvent(e);
QProcess * switchInput = new QProcess(this);
switchInput->start( "c:/english.exe");
}
我想在激活特定小部件时运行类似的代码,请参阅此答案。(事实上,我想使用focusInEvent
a 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 本身的东西。
解决方案
推荐阅读
- sql - DB2 为 MQT(Materialized Query Table)创建临时表以进行增量刷新
- rust - Rust 块和连接
- nginx - 有没有办法处理一个 URL 并用原始的子字符串(模式)形成一个新的 URL?
- python - 除了 _getexif() 之外,还有其他方法可以从图像中提取元数据吗?
- python - 如何使用排列生成的列表值生成文本
- python - 如何从具有相似元素的烧瓶中的多个单独字典返回结果
- macos - 在 OSX 中处理基于 Cocoa 的插件的主机菜单启用
- excel - 无法运行 Personal.xlsb 宏,除非“步入”
- pip - 运行 GCP Dataflow 时出现 Python 包错误
- ios - UITextView 换行意外行为