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

时间:2013-06-18 17:37:47

标签: windows deployment qt4 qt5

我遇到Qt4到Qt5的麻烦。在我的应用程序中,当用户点击打印按钮时,应该发生两件事,一件是PDF写入磁盘(在新版本中仍能正常工作,因此我知道某些打印功能正常工作)而另一件是一个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到打印时间,这意味着我的应用程序文件系统不正确,但我没有找到任何显示我不同文件结构的东西。我是在正确的轨道上还是这个设置还有其他问题?

1 个答案:

答案 0 :(得分:7)

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

感谢佩佩领导。