2016-12-31 112 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