【问题标题】:QGraphicsTextItem editing requires an action performed twiceQGraphicsTextItem 编辑需要执行两次操作
【发布时间】:2015-07-01 20:59:28
【问题描述】:

我想让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(我可能想要后者)。然后我再次双击,我可以输入添加或删除文本。

这是一种用户可能没有预料到的行为 - 我所做的任何事情似乎都无法改变它。

是我做错了什么,还是有什么需要补充的?

【问题讨论】:

    标签: c++ qt text editing qgraphicstextitem


    【解决方案1】:

    我希望鼠标在可聚焦项目上自动获得焦点。估计不是……

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      相关资源
      最近更新 更多