Qt Python - 工具箱中的报告: QTextDocument 和 QPainter
我想用工具箱制作多个文档报告。先从两页开始,这样比较简单。格式方面可以先随便弄,后面再调整。
我试着用QTextDocument配合Html,另外也尝试了QPainter。
当然,为了测试和保持简单,我只是让Qt在文档顶部显示报告的标题。
这是工具箱主框架的函数:
def toolbox_frame(self,MainWindow):
self.toolBox = QtGui.QToolBox(self.centralwidget)
self.toolBox.setGeometry(QtCore.QRect(10, 20, 471, 201))
self.toolbox_page1()
self.toolBox.addItem(self.page1, "")
self.toolBox.setItemText(self.toolBox.indexOf(self.page1), QtGui.QApplication.translate("MainWindow", "Page 1", None, QtGui.QApplication.UnicodeUTF8))
self.toolbox_page2()
self.toolBox.addItem(self.page2, "")
self.toolBox.setItemText(self.toolBox.indexOf(self.page2), QtGui.QApplication.translate("MainWindow", "Page 2", None, QtGui.QApplication.UnicodeUTF8))
... 这个函数用QTextDocument和Html来处理第一页:
def toolbox_page1(self):
self.page1 = QtGui.QWidget()
self.page1.setGeometry(QtCore.QRect(0, 0, 471, 145))
html = u""
html += (" <p><font color=red><b>Title - Build "
"a Report : page 1.</b></font>")
document = QtGui.QTextDocument(self.page1)
document.setHtml(html)
这里是使用QPainter的函数:
def toolbox_page2(self):
self.page2 = QtGui.QWidget()
self.page2.setGeometry(QtCore.QRect(0, 0, 471, 145))
sansFont = QtGui.QFont("Helvetica", 10)
painter = QtGui.QPainter(self.page2)
painter.setFont(sansFont)
painter.setPen(QtGui.QColor(168, 34, 3))
x=50
y=50
painter.drawText(x, y, "Title - Build a Report : page 2")
问题是,它只显示了工具箱的第一页和第二页,但在第一页和第二页里都没有显示报告的标题。
这里缺少了什么呢?
欢迎大家提出意见和建议。
1 个回答
1
对于页面1,文档需要通过一个小部件来显示。你需要在那个函数里添加以下内容:
textEdit = QtGui.QTextEdit(self.page1)
textEdit.setDocument(document)
layout = QtGui.QVBoxLayout(self.page1)
layout.addWidget(textEdit)
对于页面2,在小部件上绘图必须响应一个绘制事件,这就需要创建一个子类或者事件过滤器。其实,有个更简单的方法可以绘制一些文本,就是使用QLabel。把函数改成下面这样:
def toolbox_page2(self):
self.page2 = QtGui.QWidget()
self.page2.setGeometry(QtCore.QRect(0, 0, 471, 145))
label = QtGui.QLabel(self.page2)
label.setText("Title - Build a Report : page 2")
label.setStyleSheet("font: 10pt 'Helvetica'; color: rgb(168, 34, 3)")
label.setGeometry(QtCore.QRect(QtCore.QPoint(50, 50), label.sizeHint()))