2011-01-28 2 views
1

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

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

Я хочу, чтобы взаимодействие с буфером было естественным: т. Е. Ctrl + c/v на окне, команда + c/v на OSX, ctrl + c/v для буфера обмена на X, выберите для копирования для PRIMARY на X, средний клик, чтобы вставить PRIMARY на X и т. д.

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

ответ

1

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

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

1

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

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

See QKeySequence docs