QClipboard и selectedText () не равны в QTextEdit

Я делаю что-то в QTextEdit. Я пишу слот для QClipboard::changed() сигнал. Как я могу определить, находится ли в слоте текст в буфере обмена из моего приложения (а не из других приложений снаружи)?

Мое решение состоит в том, чтобы сравнить текст в буфере обмена и выделенный текст:

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

Тем не менее, я обнаружил, что, когда я выделил несколько строк и скопировал его. selectedText() обращаться с \n как 0 в то время как mimeData обращаться с этим как \n (то есть 10). Так mimeData->text() != textCursor()->selectedText(),

Кстати, что делает QClipboard::ownsClipboard() имею в виду? Это то, что я ищу?

Любая помощь? Спасибо!

0

Решение

Согласно документации:

bool QClipboard :: ownsClipboard () const

Возвращает 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()

Возвращает текст текущего выделения (который может быть пустым). Только это
возвращает текст без информации форматирования расширенного текста. если ты
хотите фрагмент документа (то есть отформатированный форматированный текст) используйте selection ()
вместо.

Замечания: Если выборка, полученная от редактора, охватывает разрыв строки,
текст будет содержать символ разделителя абзацев Uicode U + 2029
вместо символа новой строки \ n. Используйте QString :: replace () для замены
эти символы с переводами строки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]