gpt4 book ai didi

c++ - QGraphicsTextItem 编辑需要执行两次操作

转载 作者:太空宇宙 更新时间:2023-11-04 13:31:43 26 4
gpt4 key购买 nike

我想使 QGraphicsTextItem 在双击时可编辑,并在我单击时使其可移动。

#include <QApplication>
#include <QPainter>
#include <QGraphicsItem>
#include <QGraphicsView>

class TextItem: public QGraphicsTextItem
{
public:
TextItem()
{
setPlainText("hello world");
QFont f;
f.setPointSize(50);
f.setBold(true);
f.setFamily("Helvetica");
setFont(f);

setFlags(QGraphicsItem::ItemIsMovable |
QGraphicsItem::ItemIsFocusable |
QGraphicsItem::ItemIsSelectable);
setTextInteractionFlags(Qt::NoTextInteraction);
}
virtual void paint(QPainter* painter,
const QStyleOptionGraphicsItem* option,
QWidget* widget = NULL)
{
QGraphicsTextItem::paint(painter, option, widget);
}

protected:
virtual void focusOutEvent (QFocusEvent * event)
{
Q_UNUSED(event);
setTextInteractionFlags(Qt::NoTextInteraction);
}
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event)
{
Q_UNUSED(event);
setTextInteractionFlags(Qt::TextEditable); // TextEditorInteraction
}
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TextItem* t = new TextItem();
QGraphicsView view(new QGraphicsScene(-200, -150, 400, 300) );
view.scene()->addItem(t);
view.show();
return a.exec();
}

它做我想做的——除了我必须双击两次
- 第一次双击时,我看到一个光标但无法编辑文本(使用任一选项 TextEditableTextEditorInteraction(我可能想要后者)。然后我加倍- 再次单击,我可以键入以添加或删除文本。

这是一种用户可能不期望的行为 - 而且我所做的任何事情似乎都无法改变它。

我是不是做错了什么,或者有什么我需要补充的吗?

最佳答案

我希望在可聚焦的项目上进行鼠标操作,使其自动聚焦。我想不是...

mouseDoubleClickEvent 中,我添加了对 setFocus() 的调用

virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event)
{
Q_UNUSED(event);
setTextInteractionFlags(Qt::TextEditorInteraction);
setFocus();
}

关于c++ - QGraphicsTextItem 编辑需要执行两次操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31171569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com