2015-07-01 101 views
1

我想雙擊編輯一個QGraphicsTextItem,並在點擊時使它可移動。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(我可能需要後者),然後再次雙擊,我可以鍵入以添加或刪除文本

這是用戶可能不期望的行爲 - 而且我似乎沒有做任何改變它的行爲

我做錯了什麼,還是有什麼需要補充的?

回答

0

我期望在可調焦物品上有一個鼠標動作來自動對焦。我想不是...

mouseDoubleClickEvent,我添加了一個調用setFocus()

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