【问题标题】:QClipboard and selectedText() are not equal in QTextEditQClipboard 和 selectedText() 在 QTextEdit 中不相等
【发布时间】:2016-12-31 07:05:15
【问题描述】:

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

我的解决办法是对比剪贴板中的文字和选中的文字:

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

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

顺便问一下,QClipboard::ownsClipboard() 是什么意思?是我要找的吗?

有什么帮助吗?谢谢!

【问题讨论】:

    标签: c++ qt qt5 qtextedit qclipboard


    【解决方案1】:

    根据文档:

    bool QClipboard::ownsClipboard() const

    如果此剪贴板对象拥有剪贴板数据,则返回 true; 否则返回 false。

    这就是你要找的。​​p>

    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()

    返回当前选择的文本(可能为空)。这只 返回文本,没有富文本格式信息。如果你 想要一个文档片段(即格式化的富文本)使用 selection() 而是。

    注意:如果从编辑器获得的选择跨越换行符,则 文本将包含一个 Unicode U+2029 段落分隔符 而不是换行符 \n 字符。使用 QString::replace() 替换 这些字符带有换行符。

    【讨论】:

    • 谢谢!你知道mimeData()-&gt;text()selectedText()之间的细微差别吗?
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2014-10-20
    • 2013-01-10
    • 2017-08-09
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多