QT 4.5 - 更改 QGraphicsItem 的选择框

Posted

技术标签:

【中文标题】QT 4.5 - 更改 QGraphicsItem 的选择框【英文标题】:QT 4.5 - Changing the selection marquee for QGraphicsItem 【发布时间】:2009-10-22 04:17:25 【问题描述】:

通过 setSelected(true) 设置 QGraphicsItem 时,是否可以定义选择框的样式?

【问题讨论】:

【参考方案1】:

技术上没有。

快速查看 Qt 的源代码后,似乎标准项目类型 QGraphics*Item 将虚线轮廓作为默认行为。您可以通过子类化您自己的 QGraphicsItem 来解决此问题。

if (option->state & (QStyle::State_Selected | QStyle::State_HasFocus))
    qt_graphicsItem_highlightSelected(this, painter, option);

我猜你不能改变“风格”。这似乎是标准 QGraphicsItems 的一个非常静态的特性。

希望有帮助!

【讨论】:

@cesarbs 实际上找到了一个很好的解决方法,请参阅其他答案。【参考方案2】:

有一个很好的解决方案:

http://www.qtcentre.org/threads/15089-QGraphicsView-change-selected-rectangle-style

【讨论】:

任何发现此问题的人请注意:这个新答案就是您想要的;比之前接受的答案更好的答案。【参考方案3】:

只是用一个 python 示例添加到 cesarbs 的答案中,我花了一点时间来翻译所有的语法,所以我想我会提供一些代码:

class CustomItem(QtWidgets.QGraphicsPixmapItem):
    def paint(self, painter, option, widget):
        if option.state & QtWidgets.QStyle.State_Selected:
            option.state &= not QtWidgets.QStyle.State_Selected
            super().paint(painter, option, widget)
            
            # draw red outline for example
            pen = QtGui.QPen(QtGui.QColor("red"))
            painter.setPen(pen)
            painter.drawRect(option.rect)
        else:
            super().paint(painter, option, widget)

【讨论】:

以上是关于QT 4.5 - 更改 QGraphicsItem 的选择框的主要内容,如果未能解决你的问题,请参考以下文章

Qt:如何调整 QGraphicsItem 以动态改变大小

QGraphicsView 和 QGraphicsItem:缩放视图矩形时不要缩放项目

Qt 获取QGraphicsItem在屏幕上的位置,在QGraphicsItem中获取全局位置,转换为screenPos

QT 设置QGraphicsItem动起来

Qt QGraphicsItem使用信号槽注意事项

Qt QGraphicsItem使用信号槽注意事项