2016-12-31 54 views
0

我正在做一些QTextEdit。我爲QClipboard::changed()信號寫入一個插槽。在插槽中,如何判斷剪貼板中的文本是否來自我的應用程序(而不是來自其他應用程序)?QClipboard和selectedText()在QTextEdit中不相等

我的解決辦法是在剪貼板中的文本和選定的文本比較:

mimeData->text() == textCursor()->selectedText() 

然而,我發現,當我選擇多行並複製它。 selectedText()\n作爲0處理,而mimeData將其作爲\n(即10)處理。所以mimeData->text() != textCursor()->selectedText()

順便說一句,QClipboard::ownsClipboard()是什麼意思?這是我在找什麼?

任何幫助?謝謝!

回答

1

根據文檔:

布爾QClipboard :: ownsClipboard()const的

返回如果此剪貼板對象擁有的剪貼板數據真實; 否則返回false。

所以這是你在找什麼。

clipboard = QApplication::clipboard(); 
    connect(clipboard, SIGNAL(changed(QClipboard::Mode)), this, SLOT(your_slot())); 

槽:

void {your class}::your_slot() 
{ 
    if(clipboard->ownsClipboard()) 
     qDebug()<< "own"; 
    else 
     qDebug()<< "not his own"; 
} 

documentationselectedText()

抄寫返回當前選擇的文本(其可以是空的)。這隻有 返回文本,沒有豐富的文本格式信息。如果您要 需要文檔片段(即格式化富文本),請改用選擇() 。

注:如果從編輯獲得的選擇跨越線斷裂, 文本將包含一個Unicode U + 2029款分隔符 而不是換行\ n字符。使用QString :: replace()用換行符替換 這些字符。

+0

謝謝!你知道'mimeData() - > text()'和'selectedText()'之間的細微區別嗎? – tamlok

+0

@tamlok如果我的答案有用,請將其標記爲正確。 – eyllanesc

+0

@tamlok更新我的解決方案 – eyllanesc