【问题标题】:QT exec() command crashQT exec() 命令崩溃
【发布时间】:2015-07-21 20:08:05
【问题描述】:

我正在使用 QT 4.7.3 开发一个应用程序。使用 mexFunction (*.mexw32) 从 Matlab(simulink) 调用此应用程序

当我尝试使用 dialog.exec() 命令打开对话框时,会显示表单,但我会立即收到 “无响应应用程序”。之后,matlab 崩溃。

如果我尝试使用 dialog.show() 命令打开对话框,它可以正常工作。

我真的不知道发生了什么,因为这两个命令在某种程度上相似,如described here

有人知道发生了什么吗?

【问题讨论】:

    标签: c++ matlab qt qt4 mex


    【解决方案1】:

    dialog.exec() 旋转一个本地事件循环,该循环与 Matlab 本身旋转的事件循环不能很好地集成。从而崩溃。相反,您指望 Matlab 做正确的事情,只要它自己的事件循环与 Qt 的要求兼容。不幸的是,这并不适用于所有平台,尽管在 Windows 上它似乎可以工作。

    无论如何,你不应该在main 之外使用exec()

    【讨论】:

    • 什么是我的选择,因为我需要等待用户输入?
    • 现代异步 UI 代码中没有等待的位置。当对话框被接受/拒绝时,连接到对话框的acceptedrejected 信号以运行您的槽/函子。
    • 只是为了确认:我不能使用像这样的 QMessageBox::question(...)。那是对的吗?奇怪的是,这个消息框在我同事的电脑上工作,但在我的电脑上崩溃了,两者都运行相同的硬件/软件
    • @guilhermecgs 这些“方便”的 api 很遗憾地被破坏了,因为它们只暴露了伪同步接口。您需要通过复制粘贴 Qt 代码并删除 exec() 调用来编写自己的便利包装器。花一分钟时间解决问题。包装器甚至可以为您show() 对话框。它甚至可以调用函子来将结果传递给。
    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2018-02-21
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    相关资源
    最近更新 更多