Вставить событие в Qt - PullRequest
       31

Вставить событие в Qt

1 голос
/ 28 января 2011

Я хочу построить структурированный редактор документов, используя Qt. Базовая концепция для v1 - это вложенные разделы, каждый раздел имеет заголовок и один или несколько абзацев. Разделы и абзацы являются различными визуальными единицами (вероятно, с помощью затенения фона). Мне также нужно иметь возможность хранить семантику на уровне символов (то есть: этот фрагмент текста связан со ссылкой X). Если бы я хотел создать представление только для чтения, это было бы возможно с помощью QFrame для разделов и QLabel для каждого заголовка и каждого абзаца. Чтобы сделать это редактируемым, я почти уверен, что смогу захватить все события клавиатуры в окне и таким образом реализовать ощущение ввода и редактирования текста курсором.

У меня проблемы с обработкой копий / вставок.

Я хочу, чтобы взаимодействия с буфером обмена выглядели нативно: то есть ctrl + c / v в окне, команда + c / v в OSX, ctrl + c / v для буфера обмена в X, выберите для копирования для ПЕРВИЧНОГО в X, средний нажмите, чтобы вставить для ПЕРВИЧНОГО на X и т. д.

Стандартные элементы управления редактированием текста в Qt прекрасно справляются со всем этим. Мне интересно, есть ли какое-нибудь "событие вставки" или подобное, которое я могу использовать для реализации того же самого в моем настраиваемом виджете? Есть ли другой способ?

Ответы [ 2 ]

1 голос
/ 03 мая 2016

Для собственных сочетаний клавиш вы можете добавить их в пункты меню:

ui->actionCut->setShortcut(QKeySequence::Cut);
ui->actionCopy->setShortcut(QKeySequence::Copy);
ui->actionInsert_empty_row->setShortcut(Qt::Key_Insert);
ui->actionPaste->setShortcut(QKeySequence::Paste);
ui->actionRemove->setShortcut(QKeySequence::Delete);

См. Документы QKeySequence

1 голос
/ 28 января 2011

Насколько я знаю, для прослушивания нет сигнала / события вставки, хотя ничто не мешает вам взглянуть на то, как слот paste () реализован в виджетах, таких как QLineEdit, и, если возможно, реализовать свой собственный.Афферентный сигнал не так важен, так как это всего лишь сигнал, и вы можете запускать его в любое время (например, Ctrl + v, контекстное меню или меню программы).

LE: Если я думаю лучше, вы можетеЕсли вы думаете, что это неправильно, вам не нужен сигнал, вам просто нужен слот, который вы можете вызывать всякий раз, когда действие вызывается любым способом, который вы пожелаете (например, Ctrl + V).Если у вас есть слот ( QClipboard ), достаточно просто правильно подключить его к нужным запускающим действиям / сигналам.

...