私は C++ で Qt を使用してこのプログラムに取り組んできましたが、これまでのところうまくいっています。ただし、このプログラムを別のマシンに移動する必要がありました。Subversion があるので、プロジェクト フォルダー内のすべてのファイルをコミットし、新しいマシンでチェックアウトしました。いくつかのフープをジャンプして正常にビルドして実行した後、次のエラーが発生します。
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() が呼び出されたときにプログラムが私のマシンで完全に正常に動作することです。プログラムの動作が非常に異なるようにするために、2つのマシン間で何が異なる可能性があるのか わかりません。どちらも同じバージョンの 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);