我遇到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没有被发现来打印时间,这意味着我的应用程序文件系统是不正确的,但我还没有发现任何显示我一个不同的文件结构。我在正确的轨道上还是有这个设置有其他错误吗?
你确定关于'{myAppPath} \ plugins \ printsupport \ windowsprintersupport.dll'吗?应该没有“插件”部分。请将env变量'QT_DEBUG_PLUGINS'设置为非零值,然后从控制台运行应用程序,以便检查是否确实找到并使用了该插件。 – peppe
进展。 peppe,请移动printsupport \ *返回一个目录。现在它给了我一个打印对话框(Qt必须使用本地对话框而不是模拟它),但是当我点击打印时,什么都没有发生。我尝试设置环境变量并通过命令行启动,但我没有得到任何东西。我认为这一步必须从开发机器而不是部署机器完成? – RegularlyScheduledProgramming
为了让QT_DEPLOY_PLUGINS输出任何有用的内容,必须将CONFIG + = CONSOLE添加到.pro文件 – RegularlyScheduledProgramming