4

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

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

我包括打印支持。

QT += core gui network webkitwidgets widgets printsupport

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

  • {myAppPath}\MyApp[MyApp.exe, Qt5PrintSupport.dll, ...]
  • {myAppPath}\plugins\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,这意味着我的应用程序文件系统不正确,但我没有找到任何显示不同文件结构的东西。我是在正确的轨道上还是这个设置有其他问题?

4

1 回答 1

7

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

我定义为 {myAppPath}\ 的应用程序根目录是插件的根目录。因此正确的文件结构是:

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

感谢佩佩的领导。

于 2013-07-03T17:02:45.317 回答