0

変更盲目 (今回は Windows のみ) 用の小さなプログラムを作成しました。qgl ウィジェットの open gl を介して 4 つの画像 (2 つの実物、2 つのグレー) を表示します。それを行うためにペインターを使用します。

それは私のPCでかなり動作します。qtなしで他のファイルに配置しようとし、このglファイルをディレクトリに配置しました(依存関係ウォーカーで見つかりました):

libgcc_s_dw2-1.dll mingwm10.dll QtCore4.dll QtGui4.dll QtOpenGL4.dll

私のPCでは、QTCreatorの外で、パスが設定されていなくてもうまくいきました。他の各 PC では、QGL ウィジェットはただの黒です。プログラムは正常に動作しますが (ボタンをクリックするなど)、すべての画像が真っ黒です。パスを探しましたが、すべて問題ありません。何が起こっているのかわかりません。私が使用した PC には古いハードウェアが搭載されていますが、特別なことは何もありません (古いドライバーを搭載した古い Ati カードですが、中間設定で Half Life 2 をプレイできたので、ドライバーがインストールされていると思います)。

エラーメッセージなどはありません。それを修正するために何ができるか考えていますか? 何も機能しない場合は、このプログラムを含む ubuntu USB スティックを作成しようとします。

パス (パスは正しい):

C:\tina_and_mona\pics\1\1.jpg C:\tina_and_mona\pics\1\2.jpg C:\tina_and_mona\pics\1\3.jpg C:\tina_and_mona\pics\1\4.jpg

void FlickerImage::updateGL()
{
    //qDebug() << "In UpdateGl Event";
    painter.begin(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.drawImage ( QRectF(0,0,800,600), images[image_counter], QRectF(0,0, images[image_counter].width(), images[image_counter].height()));
    //painter.fillRect(QRect(0,0,800,600), QColor(0,0,0,255));
    painter.end();
}

void FlickerImage::loadImages()
{
    busy = true;
    images.clear();

    /*images.append(QImage(QDir::toNativeSeparators(QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"1.jpg")));
    images.append(QImage(QDir::toNativeSeparators(QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"2.jpg")));
    images.append(QImage(QDir::toNativeSeparators(QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"3.jpg")));
    images.append(QImage(QDir::toNativeSeparators(QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"4.jpg")));*/

    images.append(QImage(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"1.jpg")));
    images.append(QImage(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"2.jpg")));
    images.append(QImage(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"3.jpg")));
    images.append(QImage(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"4.jpg")));

    qDebug() << "Before output file";
    QFile output("image.log");

    if(!output.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
    {
        qDebug() << "Could not open output";
    }

    else
    {
        qDebug() << "image.log could be opened";
        output.write(QString("hi").toAscii());
        output.write(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"1.jpg\n").toAscii());
        output.write((QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"2.jpg\n")).toAscii());
        output.write((QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"3.jpg\n")).toAscii());
        output.write((QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"4.jpg\n")).toAscii());
        output.close();
    }

    busy = false;

}
4

3 に答える 3

1

これで問題が解決するわけではありませんが、画像がリストに追加される方法は本当に私の目を痛めます ;) これの代わりに:

images.append(QImage(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"1.jpg")));
images.append(QImage(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"2.jpg")));
images.append(QImage(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"3.jpg")));
images.append(QImage(QDir::toNativeSeparators(QDir::currentPath() + QDir::separator () + QString("pics") + QDir::separator () + QString::number(counter) + QDir::separator()+"4.jpg")));

次のようなことを試してください:

for (int i = 0; i < 4; ++i)
{
    QString imagePath = QString("%1/pics/%2/%3.jpg")
        .arg(qApp->applicationDirPath()).arg(counter).arg(i);
    if (QFileInfo::exists(imagePath))
    {
        QImage image(imagePath);
        if (image.isNull())
            qDebug() << "ERROR, image load failed: " << imagePath;
        else
            images.append(image);
    }
    else
    {
        qDebug() << "ERROR, cannot find file: " << imagePath;
    }
}

ファイル パスをネイティブ セパレータを使用するように変換する必要はないことに注意してください。ユーザーにパスを表示している場合にのみ、これを行う必要があります。私が知っているすべてのオペレーティング システム (Windows を含む) は、通常のスラッシュ / で正常に動作します。

も使用してQDir::currentPath()います。私の推測では、本当に必要なのはアプリケーションのディレクトリであり、現在のディレクトリと同じである必要はありません。qApp->applicationDirPath()代わりに使用してください。

また、通常、エラー チェックを実行しても問題はありません。

于 2012-06-20T19:59:42.257 に答える
0

jpeg 画像にも同じ問題がありました。他のコンピューターQCoreApplication::setLibraryPaths(QStringList &)にあるすべてのプラグインを使用して配置する必要がありQtSDK\Desktop\Qt\4.7.4\mingw\plugins ます (彼は指定された場所でプラグインを探します)。QCoreApplication::libraryPaths()

于 2012-07-08T02:26:57.940 に答える
0

わかりました、皆さん、

問題のある不足しているプラ​​グイン。しかし、同じディレクトリまたは ./plugins/ ディレクトリでは機能しませんでした。FULL QT SDK (はい、512 KB アプリケーションの場合は 1.65 GB Monster) を使用してファイルをバンドルしました。バージョンが一致する (4.82)。 SDK をビルドしますが、この場合は同じメジャー番号です 4)。

于 2012-06-26T10:47:34.553 に答える