首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QTextDocument的悬停效应

QTextDocument的悬停效应
EN

Stack Overflow用户
提问于 2021-08-16 13:25:25
回答 1查看 169关注 0票数 1

我想在p标签上的QTextDocument上有一些悬停效果。

我尝试过使用QTextDocument设置QTextDocument().setDefaultStyleSheet()的QSS。以下是我所取得的结果;

剧本;

代码语言:javascript
复制
from PySide2 import QtWidgets


class Test(QtWidgets.QTextBrowser):
    def __init__(self):
        super().__init__()

        self.document().setDefaultStyleSheet(
            """
p.out{
    background-color: "orange";
    color: "black";
}

p.out:hover{
    background-color: "yellow";
}
"""
        )

        self.setStyleSheet(
            """
QTextBrowser{
    background-color: "black";
    color: "white";
}
""")

        self.setHtml(
            """
<p class='out'> Checking this </p>
"""
        )


test = QtWidgets.QApplication([])

sample = Test()
sample.show()

test.exec_()

qss内部的颜色属性有效,但悬停不起作用。

对于文档中的文本片段,有什么方法可以达到悬停效果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-02 06:24:04

经过理解,QTextDocument的结构语法高亮器。我们可以随时修改QTextBlock格式化,我试着用enterEvent修改它的格式,用leaveEvent恢复格式。

我们可以使用QTextFrame使用QTextFrameFormat修改盒模型。

代码语言:javascript
复制
from PySide2 import QtWidgets, QtGui


class High(QtGui.QSyntaxHighlighter):
    def __init__(self, doc):
        super().__init__(doc)

        self._formats = tuple(
            QtGui.QTextCharFormat() for _ in range(2)
        )

        self._formats[1].setForeground(
            QtGui.QBrush(QtGui.QColor("orange"))
        )

        self._formats[1].setFontWeight(3)
        self._formats[1].setFontUnderline(True)
        self._formats[1].setFontPointSize(12)

    def highlightBlock(self, text: str):
        self.setFormat(
            0, len(text), self._formats[self.currentBlockState() if self.currentBlockState() > -1 else 0]
        )


class Sample(QtWidgets.QTextBrowser):
    def __init__(self):
        super().__init__()
        self.lighter = High(self.document())
        self._prev = None

        self.insertBlock("This is a sample line\n")
        self.insertBlock("Can also be a\nparagraph thing\n")
        self.insertBlock("it's a block, Bye!")

    def insertBlock(self, text):
        cur = self.textCursor()
        cur.block().setUserState(0)  # default: -1

        cur.insertText(text)

    def mouseMoveEvent(self, eve):
        super().mouseMoveEvent(eve)

        cur = self.cursorForPosition(eve.pos())

        if cur.block() == self._prev:
            return

        self.restore()
        cur.block().setUserState(1)
        self.lighter.rehighlightBlock(cur.block())

        self._prev = cur.block()

    def restore(self):
        if not self._prev:
            return

        self._prev.setUserState(0)
        self.lighter.rehighlightBlock(self._prev)
        self._prev = None

    def leaveEvent(self, eve):
        self.restore()
        super().leaveEvent(eve)


testing = QtWidgets.QApplication([])
sample = Sample()
sample.show()
testing.exec_()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68803602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档