【发布时间】:2016-12-04 16:27:13
【问题描述】:
我想把 QTreeWidget 放在 QCombobox 对象中。我有以下在 Linux 上运行良好的代码:
QTreeWidget* tree = new QTreeWidget(ui->comboBox);
ui->comboBox->setView(tree);
ui->comboBox->setModel(tree->model());
...但是当我尝试在 x64 windows 7 上运行此代码时,它会导致应用程序崩溃并出现运行时错误:
我尝试过的事情:
- 重新安装所有 MS VC++ 可再发行库(版本 2005-2008-2010-2012-2015、32 位和 64 位版本)
- 将 ALL Qt DDL-s 移动到应用程序文件夹
- 将 qwindows.dll 移至平台文件夹
- 使用 -O0 标志编译应用程序
- 尝试使用其他方法代替 QTreeWidget(例如 QListWidget 也会导致应用程序崩溃)。
我的环境:
操作系统:Windows 7 x86_64
Qt 版本:5.5.1 社区版,由在线安装程序安装
编译器:mingw 4.9.2 32位版本(很重要,我没有尝试64位版本)。
您可以从这里下载测试项目:Github Repo
【问题讨论】:
-
这是在运行时检测到错误情况后,在终止时优化构建时收到的错误消息。在调试器下运行调试构建会发生什么?
-
@CodyGray,没有任何反应。这是显示错误窗口时的堆栈 (imgur.com/LrqxIkn)。在该应用程序退出之后。没有 SEGFAULT-s,没有其他信息。
-
好吧,好吧,但是如果你得到一个调用堆栈,调试器会在特定的代码行上中断(并且应用程序不会被终止)。那是您在问题中显示的代码吗?无论如何,我可以猜测这是因为不能在 QComboBox 控件中托管不同的控件。文档是否明确说明这是可能的?通常这不适用于原生 Windows 控件,但 Qt 喜欢重新实现原生控件,因此如果他们特别努力允许它,它可能会在那里实现。
-
@CodyGray,我有一个调用堆栈,因为我在调用 setView 方法时设置了一个断点。按 F10(调试的下一步)后,应用程序会崩溃,没有任何调试信息。我不知道它在哪里以及为什么会崩溃。我只看到错误,然后按 OK 应用程序关闭。文档中没有任何地方允许在另一个控件中使用一个控件,但我不这样做。我只将一个视图放在另一个视图中。如果我没记错的话,在 WINAPI 中每个控件都是“窗口”,而在 Windows 中,将一个窗口放在另一个窗口中是特别原生的。
标签: c++ windows qt windows-7 qt5.5