QClipboard кладёт в буфер не те данные

261
18 июня 2018, 21:00

Формирую данные в текстовом формате и отправляю их в буфер обмена с помощью QClipboard. При этом требуется обеспечить совместимость буфера обмена с Excel. Делаю так:

QClipboard *clipboard = QApplication::clipboard();
if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C))
{
    QString clip;
    //Здесь формируется строка clip на основе выделенных данных
    qDebug() << clip;
    clipboard->setText(clip);
}

При выполнении этого кода программа выводит в qDebug() следующую строку:

"Исправность датчика 1\tНеисправен\nИсправность датчика 2\tНеисправен\n"

Однако в буфер обмена попадает только последний фрагмент строки:

"Неисправен\n"

Если выделенные данные содержат не текст, а цифры, то всё работает нормально. Например, следующая строка корректно формируется и передаётся в буфер обмена, после чего правильно вставляется в лист Excel:

"60000\t0\n64000\t0\n68000\t0\n72000\t0\n"

UPD

Если после clipboard->setText(clip) добавить qDebug() << clipboard->text(), то в программа выведет правильную строку. Но в другие программы всё равно вставляется только последний фрагмент строки.

UPD2

Нашёл причину. Оказывается, содержимое буфера обмена перезаписывается участком кода, который я здесь не привёл. Вот он:

MyTableView::keyPressEvent(QKeyEvent *event)
{
    QClipboard *clipboard = QApplication::clipboard();
    if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_C))
    {
        QString clip;
        //Здесь формируется строка clip на основе выделенных данных
        qDebug() << clip;
        clipboard->setText(clip);
    }
    QTableView::keyPressEvent(event);
}

Вызов функции предка следует перенести в начало обработчика события. Тогда всё будет нормально.

READ ALSO
запись в файл в формате JSON

запись в файл в формате JSON

Мне нужно записать в jsonObject вопросы и ответы Я делаю так:

272
Запись текста в QFile

Запись текста в QFile

Какой из способов записи текста в QFile является предпочтительным?

259
Qt расшарить Custom Component из исходного кода

Qt расшарить Custom Component из исходного кода

Есть свой компонент-наследник от QWidget, полностью в исходном кодеВ Дизайнере размещаю этот компонент QMyCustomWidget на форме

234