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 的选择框的主要内容,如果未能解决你的问题,请参考以下文章
QGraphicsView 和 QGraphicsItem:缩放视图矩形时不要缩放项目
Qt 获取QGraphicsItem在屏幕上的位置,在QGraphicsItem中获取全局位置,转换为screenPos