我一直在使用 C++ 中的 Qt 开发这个程序,到目前为止一切都很好。但是,我随后需要将该程序移动到另一台机器上。我有颠覆,所以我提交了项目文件夹中的每个文件并在新机器上检查了它。在跳过一些障碍以使其成功构建和运行后,我收到此错误:
ASSERT: "dst.depth() == 32" in file qgl.cpp,.
invalid parameter passed to c runtime function qt
我尝试单步执行程序以找到它崩溃的点,发现它是在所有内容都已初始化并且为继承 QMainWindow 类的类调用 show() 之后。c->showView()行调用 QMianWindow->show()。
----------main.cpp------------
#include <QApplication>
#include "ModelI.h"
#include "ControllerI.h"
#include "Model.h"
#include "Controller.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ModelI *m = new Model();
ControllerI *c = new Controller(m);
c->showView(); <- ERROR HERE
return a.exec();
}
问题中令人困惑的部分是,当调用 show() 时,该程序在我的机器上运行良好。我不知道两台机器之间有什么不同会使程序的行为如此不同。两者都使用相同版本的 Qt (SDK 2010.05)。两者都使用 Eclipse 进行开发。我能找到的唯一区别是我的编译器是 MinGW 4.5.0 而另一台机器的编译器是 MinGW 4.5.2。
编辑1:
这就是 Controller::showView() 的样子。
void Controller::showView()
{
mView->show();
}
这就是 mView 的初始化方式。
mView = new View(mModel, this);