0

我写了一个改变失明的小程序(这次只有windows)。它通过 qgl 小部件中的 open gl 显示 4 个图像(2 个真实,2 个灰色)。它使用画家来做到这一点。

它在我的电脑上运行良好。我试图把它放到另一个没有 qt 的地方,并将这个 gl 文件放到目录中(找到了 with dependency walker):

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

它在我的电脑上运行良好,在 QTCreator 之外并且没有设置任何路径。在另一台电脑上,QGL 小部件只是黑色的。该程序正常工作(单击按钮等),但所有图像都是黑色的。我寻找路径,但它们都很好。不知道发生了什么。我使用的电脑硬件较旧,但没有什么特别之处(较旧的 Ati 卡带有较旧的驱动程序,但我可以在中等设置下玩半条命 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 捆绑在一起(是的 1.65 GB Monster 用于 512 KB 应用程序),其中版本匹配(4.82),因为它应该是相同的(或者本地 sdk 应该相同或低于构建 sdk,但在这种情况下使用相同的主编号 4)。

于 2012-06-26T10:47:34.553 回答