PyQt4:如何在子窗口修改时更改标题

1 投票
1 回答
637 浏览
提问于 2025-04-18 00:32
class MdiChild(QtGui.QTextEdit):
    sequenceNumber = 1

    def __init__(self):
        super(MdiChild, self).__init__()

        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.isUntitled = True

    def newFile(self):
        self.isUntitled = True
        self.curFile = "document%d.txt" % MdiChild.sequenceNumber
        MdiChild.sequenceNumber += 1
        self.setWindowTitle(self.curFile + '[*]')

        self.document().contentsChanged.connect(self.documentWasModified)

    def documentWasModified(self):
        self.setWindowModified(self.document().isModified())

这段代码的作用是,当创建新的子窗口时,会把 document1.txt 显示为子窗口的标题,并且每次创建新窗口时标题会不断增加。当我在 QTextedit 中修改文本时,子窗口的标题会从 document1.txt 变成 document1.txt.*。如果我把 * 周围的 [] 去掉,打开新窗口时标题会显示为 document1.txt.*。所以我想知道在这段代码中,[] 对文档标题的作用是什么,以及 * 是怎么加到文档标题上的。
还有,请告诉我以下这行代码的意思:

self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

1 个回答

2

如在文档中提到的,

如果你使用了窗口修改机制,窗口标题里必须包含一个"[]"的占位符,这个占位符表示''应该出现的位置。通常,它应该紧跟在文件名后面,比如说“document1.txt[*] - 文本编辑器”。如果窗口修改属性是false(默认值),那么这个占位符就会被简单地去掉。

至于你第二个问题关于self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

WA_DeleteOnClose的作用是关闭文档时清理内存。

撰写回答