2012-11-02 50 views
1

我開發在Windows XP中使用QGraphicsScene一個Qt 4.8的應用程序繪製。 當用戶雙擊一個QGraphicsTextItem,我叫如何刪除選擇從一個Qt QGraphicsTextItem

textItem->setTextInteractionFlags(Qt::TextEditorInteraction); 

在接下來的選擇改變我打電話

textItem->setTextInteractionFlags(Qt::NoTextInteraction); 

這工作正常,但我覺得沒有辦法去除背景色的反轉這仍然來自編輯。在下面的屏幕截圖,我第一雙點擊第一個文本項目和所選字符「2927」。然後我點擊第二個測試項目並選擇「est」。我覺得沒有辦法在第一文本項擺脫仍然倒「2927」(雖然它不是在編輯模式了)。

enter image description here

我也試着撥打:

textItem->textCursor().clearSelection(); 
    textItem->update(); 
    textItem->setTextInteractionFlags(Qt::NoTextInteraction); 
    textItem->clearFocus(); 

但他根本不會改變的行爲。

所以,現在我找到了一個解決辦法:

QString s = textItem->toPlainText(); 
    textItem->setPlainText(""); 
    textItem->setPlainText(s); 
    textItem->setTextInteractionFlags(Qt::NoTextInteraction); 

我不喜歡這一點,但它的工作原理。

任何暗示了一個更清潔的解決方案嗎?

回答

1

由於QGraphicsTextItem::textCursor()返回光標的副本,所以必須將其設置迴文本項目以使其具有任何效果。

QTextCursor cursor(textItem->textCursor()); 
cursor.clearSelection(); 
textItem->setTextCursor(cursor); 
+0

,我已經做到了!看我的帖子。 –

+0

對不起,錯過了!奇怪它不起作用。我將建議確保調用clearSelection()實際上正在執行,但是如果您的解決方法正在工作,我想可能是其他代碼被正確調用。也許我會爲此嘗試一個實驗。 –

+0

我已經更新了我的答案。 –