Формирую данные в текстовом формате и отправляю их в буфер обмена с помощью 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);
}
Вызов функции предка следует перенести в начало обработчика события. Тогда всё будет нормально.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости