我正在QTextEdit中做某事。我为QClipboard::changed()信号写了一个插槽。在广告位中,如何判断剪贴板中的文本是否来自我的应用程序(而不是外部的其他应用程序)?

我的解决方案是比较剪贴板中的文本和选定的文本:

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


但是,我发现当我选择多行并复制时。 selectedText()\n视为0,而mimeData将其视为\n(即10)。所以mimeData->text() != textCursor()->selectedText()

顺便说一句,QClipboard::ownsClipboard()是什么意思?这是我要找的东西吗?

有什么帮助吗?谢谢!

最佳答案

根据文档:


  布尔QClipboard :: ownsClipboard()const
  
  如果此剪贴板对象拥有剪贴板数据,则返回true;否则返回true。
  否则返回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";
}


selectedText()documentation抄录


  返回当前选择的文本(可以为空)。仅此
  返回文本,没有格式文本格式信息。如果你
  想要文档片段(即格式化的富文本格式)使用selection()
  代替。
  
  注意:如果从编辑器获得的选择跨越了一个换行符,则
  文本将包含Unicode U + 2029段落分隔符
  而不是换行符\ n字符。使用QString :: replace()替换
  这些字符用换行符。

关于c++ - QClipboard和selectedText()在QTextEdit中不相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41406248/

10-13 03:57