QT5使用QPrinter QPrintDialog报错

错误信息:

undefined reference to `_imp___ZN8QPrinterC1ENS_11PrinterModeE

undefined reference to `_imp___ZN12QPrintDialogC1EP8QPrinterP7QWidget

undefined reference to `_imp___ZN20QAbstractPrintDialog16addEnabledOptionENS_17PrintDialogOptionE

undefined reference to `_imp___ZN12QPrintDialog4execEv

undefined reference to `_imp___ZN12QPrintDialogD1Ev

undefined reference to `_imp___ZN8QPrinterD1Ev

undefined reference to `_imp___ZN12QPrintDialogD1Ev

undefined reference to `_imp___ZN8QPrinterD1Ev

出错原因:

Qt 5中将所有打印的相关类都放到了Qt Print Support模块中

解决办法:

在.pro文件中添加代码:qtHaveModule(printsupport): QT += printsupport

使用 `from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QPrinter, QPrintDialog` 时,`QPrinter` 和 `QPrintDialog` 出错,可能有以下几种原因及解决办法: ### 1. PyQt5 未正确安装 若 PyQt5 未正确安装,导入模块时会出错。可使用以下命令安装或更新 PyQt5: ```bash pip install --upgrade PyQt5 ``` ### 2. 版本兼容性问题 某些版本的 PyQt5 可能存在兼容性问题,可尝试更新到最新版本,或安装一个已知稳定的版本: ```bash pip install PyQt5==5.15.6 ``` ### 3. 命名冲突 若代码中定义了与 `QPrinter` 或 `QPrintDialog` 同名的变量或类,会引发命名冲突。检查代码,确保没有使用相同的名称。 ### 4. 导入错误 虽然 `QPrinter` 和 `QPrintDialog` 通常在 `PyQt5.QtPrintSupport` 模块中,而非 `PyQt5.QtWidgets`。因此,正确的导入方式如下: ```python from PyQt5.QtWidgets import QApplication, QWidget, QPushButton from PyQt5.QtPrintSupport import QPrinter, QPrintDialog ``` 以下是修改后的完整示例代码: ```python from PyQt5.QtWidgets import QApplication, QWidget, QPushButton from PyQt5.QtPrintSupport import QPrinter, QPrintDialog from PyQt5.QtGui import QPixmap class PrintWindowAsImage(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.btn = QPushButton('Print Window as Image', self) self.btn.clicked.connect(self.print_window) self.btn.move(50, 50) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Print Window as Image') self.show() def print_window(self): printer = QPrinter() dialog = QPrintDialog(printer, self) if dialog.exec_() == QPrintDialog.Accepted: pixmap = self.grab() painter = QPainter(printer) painter.drawPixmap(0, 0, pixmap) painter.end() if __name__ == '__main__': app = QApplication(sys.argv) ex = PrintWindowAsImage() sys.exit(app.exec_()) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值