部署的Qt5应用程序不打印或显示打印对话框

我正在经历Qt4到Qt5的麻烦。 在我的应用程序中,当用户点击打印button时,应该发生两件事,一是PDF被写入磁盘(在新版本中仍然正常工作,所以我知道一些打印function正常工作),另一个是QPrintDialog应exec()然后发送到连接的打印机。

当我从我的开发机器启动时,我看到对话框。 应用程序在已部署的机器上启动,但QPrintDialog从不显示,文档也不会打印。

我包括打印支持。

QT += core gui network webkitwidgets widgets printsupport 

我一直在使用Process Explorer来查看应用程序在我的开发机器上使用的DLL,我相信一切都存在。 我的应用程序包包括:

  • {myAppPath} \ MyApp [MyApp.exe,Qt5PrintSupport.dll,…]
  • {myAppPath} \插件\ printsupport \ windowsprintersupport.dll
  • {myAppPath} \ plugins \ imageformats [qgif.dll,qico.dll,qjpeg.dll,qmng.dll,qtga.dll,qtiff.dll,qwbmp.dll]

以下是相关的代码片段:

 void PrintableForm::printFile() { //Writes the PDF to disk in every environment pdfCopy(); //Paper Copy only works on my dev machine QPrinter paperPrinter; QPrintDialog printDialog(&paperPrinter,this); if( printDialog.exec() == QDialog::Accepted ) { view->print(&paperPrinter); } this->accept(); } 

我的第一个想法是相关的DLL没有被发现来打印时间,这意味着我的应用程序文件系统是不正确的,但我还没有发现任何东西,显示我一个不同的文件结构。 我在正确的轨道上还是有这个设置的其他错误吗?

这是另一个经典的Windows / Qt5部署问题,缺少插件和插件放在不正确的地方。 通过使用环境变量QT_DEBUG_PLUGIN并将CONFIG + = CONSOLE添加到我的PRO文件,我能够看到在我的开发机器上,应用程序正在加载qminimal.dll,我没有出货。

我已经定义为{myAppPath}的应用程序根目录是插件的根目录。 所以正确的文件结构是:

  • {myAppPath} \ MyApp [MyApp.exe,Qt5PrintSupport.dll,…]
  • {myAppPath} \平台[qwindows.dll,qminimal.dll]
  • {myAppPath} \ printsupport *
  • {myAppPath} \ imageformats *
  • {myAppPath} \ *承载

感谢贝贝的领先。