2013-06-18 64 views
4

我遇到Qt4到Qt5的问题。在我的应用程序中,当用户点击打印按钮时,应该发生两件事,一件是PDF被写入磁盘(在新版本中仍然正常工作,所以我知道一些打印功能正常工作),另一件是QPrintDialog应该执行()然后发送到连接的打印机。部署的Qt5应用程序不打印或显示打印对话框

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

我包括打印支持。

QT += core gui network webkitwidgets widgets printsupport 

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

  • {myAppPath} \ MyApp的[MyApp.exe的,Qt5PrintSupport.dll,...]
  • {myAppPath} \插件\ printsupport \ windowsprintersupport.dll
  • {myAppPath} \插件\ 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没有被发现来打印时间,这意味着我的应用程序文件系统是不正确的,但我还没有发现任何显示我一个不同的文件结构。我在正确的轨道上还是有这个设置有其他错误吗?

+1

你确定关于'{myAppPath} \ plugins \ printsupport \ windowsprintersupport.dll'吗?应该没有“插件”部分。请将env变量'QT_DEBUG_PLUGINS'设置为非零值,然后从控制台运行应用程序,以便检查是否确实找到并使用了该插件。 – peppe

+0

进展。 peppe,请移动printsupport \ *返回一个目录。现在它给了我一个打印对话框(Qt必须使用本地对话框而不是模拟它),但是当我点击打印时,什么都没有发生。我尝试设置环境变量并通过命令行启动,但我没有得到任何东西。我认为这一步必须从开发机器而不是部署机器完成? – RegularlyScheduledProgramming

+0

为了让QT_DEPLOY_PLUGINS输出任何有用的内容,必须将CONFIG + = CONSOLE添加到.pro文件 – RegularlyScheduledProgramming

回答

6

这是另一个经典的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} \ *承载

感谢佩普领先。

相关问题