2012-06-20 34 views
0

我寫了一個小程序,用於改變失明(此時僅用於Windows)。它通過在qgl小部件中打開gl顯示4個圖像(2個真實,2個灰色)。它使用畫家來做到這一點。QT QGL在不同電腦上的黑色小工具

它工作在我的電腦上。我試圖把它放到一個沒有其他Qt和放置在此GL文件到目錄(發現與Dependency Walker中):

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

它運行良好,我的電腦,QTCreator之外,沒有任何路徑設置。在其他PC上,QGL小部件只是黑色。該程序正常工作(點擊按鈕等),但所有圖像只是黑色。我尋找路徑,但他們都很好。不知道發生了什麼。我使用的電腦有較舊的硬件,但沒什麼特別的(舊的ATI卡與舊的驅動程序,但我可以在中等設置下玩半條命2,所以我假設驅動程序已安裝)。

我沒有得到任何錯誤信息或任何東西。任何想法可以做些什麼來解決它?如果沒有任何作品,我會嘗試創建一個ubuntu usb棒與它的程序。

路徑(路徑是正確的):

C:\ tina_and_mona \圖片\ 1 \ 1.JPG C:\ tina_and_mona \圖片\ 1 \ 2.JPG C:\ tina_and_mona \圖片\ 1 \ 3.JPG C:\ tina_and_mona \圖片\ 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; 

} 
+0

設置我也經歷了黑色的OpenGL輸出。它是通過更新顯卡驅動程序修復的。所以我建議你先嚐試一下。 – 2012-06-20 15:43:48

+0

它似乎與插件系統有關。 qApp-> addLibraryPath( 「C:/ customPath /插件」); http://doc.qt.nokia.com/4.7-snapshot/deployment-windows.html#application-dependencies複製所需的不會工作。我會複製並測試它;) – user1439712

+0

像這樣的人推薦:http://deskew.com/blog/tags/qt-plugins-deploy/但所有需要的插件文件夾與您的應用程序在相同的目錄。沒有工作太 – user1439712

回答

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()

它通常不會傷害做一些錯誤檢查。

+0

謝謝Roku。我做了一整天的錯誤檢查。路徑是正確的我測試它與輸出到一個調試文件。我會測試這個:http://www.softwareprotection.info/2011/12/application-virtualization-bundle-qt-runtime-to-single-executable-for-windows/或者只是簡單地安裝qt運行時與我的應用程序。 – user1439712

0

玉傢伙,

缺少插件哪裏出了問題。但是進入同一個目錄或者./plugins/目錄不起作用。我用FULL QT SDK捆綁了這個文件(對於一個512 KB的應用程序,是1.65 GB的怪物),版本匹配(4.82),因爲它應該是相同的(或者本地sdk應該是相同的或者低於建立sdk,但在這種情況下相同的主要數字4)。

0

與JPEG圖像,對同樣的問題,你需要使用QCoreApplication::setLibraryPaths(QStringList &),並把所有的插件,位於QtSDK\Desktop\Qt\4.7.4\mingw\plugins到其他電腦(他會找他們指定的位置),你可以看到你已經通過QCoreApplication::libraryPaths()

相關問題