crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Отрисовка стандартного виджета на буфер
piton
  опции профиля:
сообщение 29.9.2009, 13:11
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 29.9.2009
Пользователь №: 1125

Спасибо сказали: 0 раз(а)




Репутация:   0  


Предисловие: есть движок, в котором реализованы мультимедиа объекты (картинки, видео, текст и т.д.) и их управление (загрузка, отрисовка, размещение на окне). Все объекты выводятся на окно в зависимости от их глубины (depth) размещения, т.е. объекты могут друг на друга наезжать и частично или полностью перекрывать друг друга. Все это дело должно работать как под виндой, так и под линуксами. Было принято решение использовать QT в качестве реализации главного окна и обработки мышиных и клавиатурных сообщений.

Сама суть: нужен ввод с клавиатуры в текстовое поле. В качестве эксперимента был взят класс QTextEdit. В принципе в нем все устраивает, за исключением одного момента: это отрисовка в буфер. Снять копию с виджета и поместить ее в тот же QImage не составляет труда, но нельзя запретить виджету рисоваться куда ему захочется. Под виндой это решалось просто, путем сабклассинга и подсовывание своего контекста рисования. В QT я не нашел способа подсунуть свой контекст для отрисовки. QT настырно продолжает рисовать на свой контекст. Пробовал переопределять функции, связанные с рисованием, но в QT они носят чисто информационный характер, т.е. как состоявшийся факт "я отрисовалась и если хочешь, можешь ты еще чего поверх нарисовать". Цель состоит в том, что бы можно было поле для ввода текста использовать от QT и при этом рисовать самому, перемешивая с другими объектами.

Вопрос: возможно ли запретить виджету рисоваться куда ему захочется или дать виджету свой контекст для рисования и он сам туда рисовался, при этом не использовал контекст рисования родительского окна (фактически единственного окна)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 29.9.2009, 15:46
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(piton @ 29.9.2009, 18:27) *
Эта функция вызывается когда виджет уже отрисовался
нет, только когда он хочет рисоваться.

Ещё можешь почитать про технологию "Мужик", как мы её окрестили :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
piton
  опции профиля:
сообщение 29.9.2009, 16:15
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 29.9.2009
Пользователь №: 1125

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 29.9.2009, 16:46) *
Цитата(piton @ 29.9.2009, 18:27) *
Эта функция вызывается когда виджет уже отрисовался
нет, только когда он хочет рисоваться.

Хорошо.

class myEdit : public QTextEdit
{
public:
  myEdit(QWidget *parent)
    : QTextEdit(parent)
  {
  }

protected:
  virtual void paintEvent(QPaintEvent *event)
  {
    /*
      Тут мы можем что нарисовать, но мне это не нужно
    */

    // Если принять сообщение
    event->accept();
    // то и граб и рендер не будет работать, т.е. это полностью глушит отрисовку

    // Если же вызвать родителя, то виджет смело отрисуется на контекст главного окна.
    QTextEdit::paintEvent(event);
  }
}

Может есть возможность во время paintEvent(...) снимать копию изображения с виджета или говорить ему что надо отрисовать на сторонний контекст?

Цитата(Litkevich Yuriy @ 29.9.2009, 16:46) *
Ещё можешь почитать про технологию "Мужик", как мы её окрестили :)

Спасибо за пример. Но немного не по моей теме. :unsure: . Может и ошибаюсь....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- piton   Отрисовка стандартного виджета на буфер   29.9.2009, 13:11
- - rnd   наследуйтесь и переопределите QTextEdit::paintEven...   29.9.2009, 14:23
|- - piton   Цитата(rnd @ 29.9.2009, 15:23) наследуйте...   29.9.2009, 14:27
- - ViGOur   Цитата(piton @ 29.9.2009, 15:27) Пробовал...   29.9.2009, 15:10
|- - piton   Цитата(ViGOur @ 29.9.2009, 16:10) Цитата(...   29.9.2009, 15:42
- - Litkevich Yuriy   Цитата(piton @ 29.9.2009, 18:27) Эта функ...   29.9.2009, 15:46
|- - piton   Цитата(Litkevich Yuriy @ 29.9.2009, 16:46...   29.9.2009, 16:15
- - Litkevich Yuriy   Цитата(piton @ 29.9.2009, 20:15) отрисова...   29.9.2009, 16:27
|- - piton   Цитата(Litkevich Yuriy @ 29.9.2009, 17:27...   29.9.2009, 16:54
|- - BRE   Цитата(piton @ 29.9.2009, 17:54) сторонни...   29.9.2009, 17:05
|- - piton   Цитата(BRE @ 29.9.2009, 18:05) Думаю стои...   29.9.2009, 17:16
|- - BRE   Цитата(piton @ 29.9.2009, 18:08) Я так и ...   29.9.2009, 17:23
- - rnd   Самое просто в таких случаях - смотреть исходники ...   29.9.2009, 17:33
|- - piton   Цитата(rnd @ 29.9.2009, 18:33) Самое прос...   30.9.2009, 13:02
- - Litkevich Yuriy   piton, тут меня одна мыслишка посетила. Значится б...   29.9.2009, 17:59
- - BRE   2 piton Перечитал первый пост темы и у меня возни...   29.9.2009, 19:02


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 1:54