- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何重新实现QTextDocument.createObject
?
此方法在制作QTextFrame
、QTextList
、QTextTable
或其他QTextObject
时发挥作用。
根据woboq ,我想我的重新实现是一样的。
但是内核停止了。
为什么?我的代码缺少什么?from PySide2 import QtWidgets
from PySide2 import QtGui
from PySide2 import QtCore
import PySide2
import sys
import os
dirname = os.path.dirname(PySide2.__file__)
plugin_path = os.path.join(dirname, 'plugins', 'platforms')
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = plugin_path
class TextEdit(QtWidgets.QTextEdit):
def __init__(self, parent=None):
super(TextEdit, self).__init__(parent=None)
document = TextDocument(self)
self.setDocument(document)
class TextDocument(QtGui.QTextDocument):
def __init__(self, parent=None):
super(TextDocument, self).__init__(parent=None)
self.setParent(parent)
def createObject(self, f):
obj = QtGui.QTextObject(self)
if f.isListFormat():
obj = QtGui.QTextList(self)
elif f.isTableFormat():
obj = QtGui.QTextTable(self)
elif f.isFrameFormat():
obj = QtGui.QTextFrame(self)
return obj
def main():
if QtWidgets.QApplication.instance() is not None:
app = QtWidgets.QApplication.instance()
else:
app = QtWidgets.QApplication([])
mainwindow = TextEdit()
mainwindow.show()
sys.exit(QtWidgets.QApplication.exec_())
if __name__ == "__main__":
main()
最佳答案
在我看来,这是一个错误(我已经用 PyQt5 对其进行了测试,它工作正常),问题是 QTextObject 的生命周期,因为与 C++ 一样,生命周期是未定义的,因为它是一个指针,但作为 QTextDocument 的子级,所以它的生命周期是 QTextDocument 的生命周期,但在 python 中,它似乎认为它是一个有限范围的对象(局部变量),不尊重 QTextDocument 对此的所有权,因为它是它的父级。解决方法似乎是使 obj 成为该类的成员:
def createObject(self, f):
self.obj = QtGui.QTextObject(self)
if f.isListFormat():
self.obj = QtGui.QTextList(self)
elif f.isTableFormat():
self.obj = QtGui.QTextTable(self)
elif f.isFrameFormat():
self.obj = QtGui.QTextFrame(self)
return self.obj
或者使用属于该类成员的容器。
class TextDocument(QtGui.QTextDocument):
def __init__(self, parent=None):
super(TextDocument, self).__init__(parent)
<b>self.objs = []</b>
def createObject(self, f):
obj = QtGui.QTextObject(self)
if f.isListFormat():
obj = QtGui.QTextList(self)
elif f.isTableFormat():
obj = QtGui.QTextTable(self)
elif f.isFrameFormat():
obj = QtGui.QTextFrame(self)
<b>self.objs.append(obj)</b>
return obj
我更喜欢第二种解决方法,因为在第一种解决方法的情况下,如果您创建多个 QTextObject,则可能会产生问题,因为前一个将被删除。
最后我建议报告该错误。
某些对象生命周期的处理似乎是 PySide2 中的一个持续存在的错误。
关于python - 如何重新实现QTextDocument createObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59872065/
当我从我的经典 ASP 页面调用 Server.CreateObject() 时,我得到 Microsoft VBScript runtime (0x800A01B6) Object doesn't
有谁知道使用以下选项的原因: Wscript.CreateObject("some.object") 和 CreateObject("some.object") 在 VBScript 中?当我找到使用
下面的 JSNI 包装器类是否做同样的事情? public final MyClass extends JavaScriptObject { // ... private static M
我尝试使用 MSXML2.serverXMLHTTP.6.0 或 WinHttp.WinHttpRequest.5.1 同时创建 100-300 个 HTTP 对象/请求。 这些请求是使用测试应用程序
如何重新实现QTextDocument.createObject? 此方法在制作QTextFrame、QTextList、QTextTable或其他QTextObject时发挥作用。 根据woboq
我想用简单的 C++ 语法创建一个简单的工厂方法: void *createObject(const char *str,...) { if(!strcmp("X",str)) retu
在 VBScript(和 VBA/VB6)中,有一个名为 CreateObject 的函数 像这样: Dim ExcelApp As Object Set ExcelApp = CreateObjec
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
有人可以建议我如何终止或绕过偶尔需要几分钟才能完成的 CreateObject 操作吗?基本上我有这段代码: Set m_Zeacom = CreateObject("QmCOM.QIntegrate
我在理解 createObject() 时遇到了一些问题函数,文档说它的使用类似于 CreateObject("component", component-name) . 在文档中,提到Coldfus
我喜欢脚本,我不喜欢重新发明轮子,所以我喜欢 CreateObject 能否请您指出一个可在 VBScript 上使用的广泛而有用的对象列表,并附上简要说明。真的,我还没有找到一个超过 50 个的网站
我想创建一个安全的 ColdFusion 环境,为此我使用了多个沙箱配置。使用友好的管理员界面可以轻松完成以下任务: 限制 CFtags,例如:cfexecute、cfregistry 和 cfhtt
我有这个 VBScript 它工作正常,脚本没有问题,但我想在 Chrome 而不是 IE 中打开它。 我对 VB 脚本非常陌生。 有人可以帮帮我吗。 WScript.Quit Main Functi
我有一个 VB.NET 应用程序,它使用 CreateObject 来使用 Excel 并将大量数据转储到其中。我们遇到了内存不足的异常,此时我们的应用程序通常会达到 1GB 内存。但我无法将所有数字
我正在用经典的 ASP(在 Windows CE 上)编写一个导航系统。我需要一种基于调用脚本动态包含导航文件的方法。我想出了以下代码,其中包含位于调用脚本文件夹中的 nav.inc,以允许不同的文件
我正在使用 HtmlPage.RegisterCreateableType从javascript调用一些C#代码的方法。在 MSDN 文档中,他们说: Registers a managed type
我有一个包含以下代码的 .cfm 文件: #a.hello()# #testJava()# 这引用了一个 Java 类文件: public class Test {
当我在 NS-3(网络模拟器)中查看不同的示例时,我遇到了这样的定义。我不明白这个语法到底是什么意思。 Ptr a = CreateObject (); 在其他一些情况下,它们使用类似的语法,但
早上好。我在这个论坛和互联网上阅读了很多类似的主题,但我没有找到解决我的问题的方法。 我只是想用 C++ 转换这些 VB 行: Dim OR As Object Dim info as String
有谁知道在使用 WScript.CreateObject 时使用前缀的实际目的? 我有一个 C++ COM 项目示例,它有一个调用 C++ dll 项目中 COM 对象方法的 VB 脚本文件。 Fun
我是一名优秀的程序员,十分优秀!