Для некоторых приложений может оказаться недостаточно встроенных функциональных возможностей. Например, нам могут потребоваться данные, которые не являются просто текстом или изображением, или мы захотим обеспечить работу с многими различными форматами данных с целью достижения максимальной совместимости с другими приложениями. Эта проблема очень напоминает ту, с которой мы столкнулись при обеспечении механизма «drag-and-drop», и решение также будет аналогичным: мы можем создать подкласс
Если наше приложение поддерживает механизм «drag-and-drop» через пользовательский подкласс
В системе X11, как правило, можно вставлять выделенные объекты нажатием средней кнопки мышки, которая имеет три кнопки. Это делается путем применения отдельной «выделенной области» буфера обмена. Если вам нужно,чтобы ваш виджет поддерживал такую операцию буфера обмена вместе со стандартными операциями, вы должны передавать
01 void MyTextEditor::mouseReleaseEvent(QMouseEvent *event)
02 {
03 QClipboard *clipboard = QApplication::clipboard;
04 if (event->button == Qt::MidButton
05 && clipboard->supportsSelection) {
06 QString text = clipboard->text(QClipboard::Selection);
07 pasteText(text);
08 }
09 }
В системе X11 функция
Если мы хотим получать уведомления о каждом изменении содержимого буфера обмена, мы можем соединить сигнал
Глава 10. Классы отображения элементов
Многие приложения позволяют пользователям выполнять поиск, просмотр и редактирование отдельных элементов, принадлежащих набору данных. Эти данные могут храниться в файлах, в базе данных или на сетевом сервере. Обычно работа с подобными наборами данных осуществляется в Qt с использованием классов отображения элементов.
В ранних версиях Qt виджеты отображения элементов заполнялись содержимым всего набора данных; пользователи обычно выполняли необходимые операции по поиску и редактированию данных, находящихся в виджете, в какой-то момент сделанные изменения записывались обратно в источник данных. Хотя этот метод вполне понятен и прост в применении, он не совсем подходит для очень больших наборов данных и для ситуаций, когда требуется отображать одни и те же данные в двух или более разных виджетах.
В языке Smalltalk получил популярность гибкий подход к визуальному отображению больших наборов данных: модель—представление—контроллер (model—view—controller — MVC). В подходе MVC
В Qt используется вдохновленная подходом MVC архитектура модель/представление. Здесь модель имеет такие же функции, как и в классическом методе MVC. Но вместо контроллера в Qt используется немного другое понятие: