发布版本中的 Qt 不可见组合框(但不在调试版本中)

Posted

技术标签:

【中文标题】发布版本中的 Qt 不可见组合框(但不在调试版本中)【英文标题】:Qt invisible combo box in release build (but not in debug build) 【发布时间】:2018-09-27 13:08:19 【问题描述】:

我有一个到目前为止运行良好的应用程序。 今天我已将我的 ubuntu 更新到 18.04,因此重新安装了所有软件组件,包括 Qt。

现在我体验到了一种非常连贯的行为。 当我在调试版本中编译我的应用程序时,一切都是正确的。当我切换到发布版本时,一些组合框变得不可见。

奇怪的是,事件仍然有效,组合框仍然存在(但不可见)。 我知道这一点是因为我使用installEventFilter() 如果我用鼠标悬停组合框,if(event->type() == QEvent::Enter) 会更改其他一些小部件。尽管组合框是不可见的,但当我将鼠标悬停在组合框所在的区域时,事件仍然有效。

不幸的是,我不知道是什么导致了这个问题,所以我无法在一个最小的例子中重现它。

我的问题是:以前有没有人经历过这样的事情? 并且:我应该从哪里开始寻找错误? (我无法调试它,因为调试版本的一切都是正确的)

顺便说一句:我不知道这是否相关,但是当我第一次尝试运行应用程序时,我收到了一个错误,gl/gl.h 丢失。在向我的朋友 google 寻求帮助后,我发现 OpenGL 丢失了,所以我安装了它。

【问题讨论】:

第一件事:***.com/help/mcve 【参考方案1】:

在设置组合框的属性时,我会去寻找未初始化的变量。通常在调试中,即使是未初始化的变量也会设置为某个固定值。

或者您可能正在设置未在发布版本中编译的断言中的属性?例如。像这样

Q_ASSERT(...)

() 之间的代码将在发布构建期间被跳过。

【讨论】:

感谢您的回答,我会看看这个。有点奇怪的是,它在发布时在windows上运行,之前在Linux上运行,现在我在Linux下切换到新版本时发生了这种情况 我查看了源代码,现在它可以工作了,我的MainWindow::eventFilter 函数错过了一个返回语句(因为我认为这无关紧要)。我只是添加了这个语句,现在它可以工作了。我会接受你的回答,因为它给了我正确的方向。

以上是关于发布版本中的 Qt 不可见组合框(但不在调试版本中)的主要内容,如果未能解决你的问题,请参考以下文章

Fabric(Crashlytics):最新版本在“最新版本”部分不可见

Qt 创造者。为啥我在编译发布版本时收到有关 glut 的错误,但没有调试?

如何完全禁用 Qt Creator 中的 QML 调试器?

WPF:尝试根据组合框中的选择更改可见性

在 Mac OSX 上安装 Qt 的调试版本

Qt C++根据组合框中的选择创建一个对象