crossplatform.ru

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


  Ответ в Отрисовка стандартного виджета на буфер
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
piton Дата 30.9.2009, 13:02
 
Цитата(rnd @ 29.9.2009, 18:33) *
Самое просто в таких случаях - смотреть исходники куте и дебажится

Дебажили, откуда и поняли, что QT рисует на главное окно само.

Цитата(Litkevich Yuriy @ 29.9.2009, 18:59) *
piton, тут меня одна мыслишка посетила. Значится баловался я QWebClient'ом, который сделал Мортен в лаборатории тролей.
Смысл его простой, вместо корневого виджета в своей программе, например, QWidget, устанавливаешь QWebClient. Компилируешь и запускашь.
Открываешь браузер и вводишь адрес: http://localhost:1818 и видешь в браузере свою программу (и она работает). Вот мой скрин с использованием QWT

Суть мысли:
я заметил, что работает это так: запускашь свою программу, появляется её окно, но как только ты в браузере обращаешся к ней. Окно обычное исчезает. Стало бвть рисование проболжается не на окошке.

Может там почерпнёшь, чтони-будь интересное?

Сейчас почитаем, потом отпишу о результатах.

Цитата(BRE @ 29.9.2009, 20:02) *
2 piton

Перечитал первый пост темы и у меня возник вопрос, а почему для всего этого не использовать QGraphicsView+QGraphicsScene. Эта связка и обеспечивает необходимый функционал. Глубина элементов есть, виджет на сцену поместить можно.

Для этого надо переделать все, а проект уже идет не первый год. Может в следующих версиях на этом и будем основываться.
BRE Дата 29.9.2009, 19:02
  2 piton

Перечитал первый пост темы и у меня возник вопрос, а почему для всего этого не использовать QGraphicsView+QGraphicsScene. Эта связка и обеспечивает необходимый функционал. Глубина элементов есть, виджет на сцену поместить можно.
Litkevich Yuriy Дата 29.9.2009, 17:59
  piton, тут меня одна мыслишка посетила. Значится баловался я QWebClient'ом, который сделал Мортен в лаборатории тролей.
Смысл его простой, вместо корневого виджета в своей программе, например, QWidget, устанавливаешь QWebClient. Компилируешь и запускашь.
Открываешь браузер и вводишь адрес: http://localhost:1818 и видешь в браузере свою программу (и она работает). Вот мой скрин с использованием QWT

Суть мысли:
я заметил, что работает это так: запускашь свою программу, появляется её окно, но как только ты в браузере обращаешся к ней. Окно обычное исчезает. Стало бвть рисование проболжается не на окошке.

Может там почерпнёшь, чтони-будь интересное?
rnd Дата 29.9.2009, 17:33
  Самое просто в таких случаях - смотреть исходники куте и дебажится
BRE Дата 29.9.2009, 17:23
 
Цитата(piton @ 29.9.2009, 18:08) *
Я так и не смог найти какого-либо примера или информации как это можно сделать. Хвостов у виджета в сторону QPaintEngine тоже не обнаружил. :(
Если есть какие либо мысли, с удовольствие выслушаю.

Мысль следующая....
Любой виджет это QPaintDevice, в начале рисования он создает QPainter, которому указывает себя в качестве поверхности для рисования. Этот вызов идет в QPaintEngine::begin( QPaintDevice * pdev ). Это виртуальный метод, если его переопределить, то можно попробовать использовать вместо pdev свое устройство отображения.

Это только мысли.
piton Дата 29.9.2009, 17:16
 
Цитата(BRE @ 29.9.2009, 18:05) *
Думаю стоит смотреть в сторону QPaintEngine, и делать своего наследника...


Я так и не смог найти какого-либо примера или информации как это можно сделать. Хвостов у виджета в сторону QPaintEngine тоже не обнаружил. :(
Если есть какие либо мысли, с удовольствие выслушаю.

Цитата(BRE @ 29.9.2009, 18:05) *
Думаю стоит смотреть в сторону QPaintEngine, и делать своего наследника...


Я так и не смог найти какого-либо примера или информации как это можно сделать. Хвостов у виджета в сторону QPaintEngine тоже не обнаружил. :(
Если есть какие либо мысли, с удовольствие выслушаю.
BRE Дата 29.9.2009, 17:05
 
Цитата(piton @ 29.9.2009, 17:54) *
сторонний - все что угодно, только не главное окно
на контекст - HDC, QImage, QPixmap и т.д.

Думаю стоит смотреть в сторону QPaintEngine, и делать своего наследника...
piton Дата 29.9.2009, 16:54
 
Цитата(Litkevich Yuriy @ 29.9.2009, 17:27) *
Цитата(piton @ 29.9.2009, 20:15) *
отрисовать на сторонний контекст?
я честно говоря не совсем понимаю, что значит на сторонний. И что значит на контекст, на чём-то другом кроме экрана?

Если так то можно посмотреть в сторону QImage.

В QT все объекты рисуются на главное окно. Мне надо что бы виджет (QTextEdit) рисовался, скажем. на QImage и только на него, что бы виджет не рисовался на главное окно. Я знаю как рисовать на QImage, но при этом видже одновременно рисуется на главное окно. Если его скрывать или убирать за пределы окна, то он тупо перестает рисоваться, даже на QImage.

сторонний - все что угодно, только не главное окно
на контекст - HDC, QImage, QPixmap и т.д.
Litkevich Yuriy Дата 29.9.2009, 16:27
 
Цитата(piton @ 29.9.2009, 20:15) *
отрисовать на сторонний контекст?
я честно говоря не совсем понимаю, что значит на сторонний. И что значит на контекст, на чём-то другом кроме экрана?

Если так то можно посмотреть в сторону QImage.
piton Дата 29.9.2009, 16:15
 
Цитата(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: . Может и ошибаюсь....
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 16.4.2024, 16:18