| Название: Рисование по QWidget в Линукс Отправлено: s-s-n от Мая 20, 2014, 19:25 Доброго всем времени суток... Надо реализовать рисование по QWidget. Что взять за основу? В Windows, как я понял, подобная задача решается с помощью: GetDC(); CreateCompatibleDC(); GetWindowRect(); CreateCompatibleBitmap(); ReleaseDC() SelectObject(); Есть ли аналоги функций в библиотеке Qt? Или здесь будет другой порядок действий? Название: Re: Рисование по QWidget в Линукс Отправлено: Alex Custov от Мая 20, 2014, 19:36 За основу взять QPainter и рисовать всё что нужно внутри QWidget::paintEvent() Название: Re: Рисование по QWidget в Линукс Отправлено: s-s-n от Мая 21, 2014, 08:00 За основу взять QPainter и рисовать всё что нужно внутри QWidget::paintEvent()Это если реализовывать свой класс и в нем рисовать. Вроде можно рисовать и вне виджета... А как на счет аналогов приведенных функций... Название: Re: Рисование по QWidget в Линукс Отправлено: Old от Мая 21, 2014, 08:05 Это если реализовывать свой класс и в нем рисовать. Вроде можно рисовать и вне виджета...Все это решается с помощью QPainter и QImage. А как на счет аналогов приведенных функций... Название: Re: Рисование по QWidget в Линукс Отправлено: s-s-n от Мая 21, 2014, 09:34 Это если реализовывать свой класс и в нем рисовать. Вроде можно рисовать и вне виджета...Все это решается с помощью QPainter и QImage. А как на счет аналогов приведенных функций... Как то так: QImage image; QPainter p; p.begin(&image); p.drawLine(0,0, 100, 100); p.fillRect(200, 200, 50, 50, Qt::green); p.end(); Название: Re: Рисование по QWidget в Линукс Отправлено: Bepec от Мая 21, 2014, 11:59 Да, как то так. То, что вы привели, относится к WinApi. А Qt даёт универсальный кросс-платформенный интерфейс. Название: Re: Рисование по QWidget в Линукс Отправлено: s-s-n от Мая 21, 2014, 13:44 Да, как то так.Каким образом можно произвести эти действия: То, что вы привели, относится к WinApi. А Qt даёт универсальный кросс-платформенный интерфейс. GetDC(); CreateCompatibleDC(); GetWindowRect(); CreateCompatibleBitmap(); ReleaseDC() SelectObject(); при помощи Qt? ну или достигнуть тот же результат... Название: Re: Рисование по QWidget в Линукс Отправлено: Bepec от Мая 21, 2014, 14:14 А вы опишите что вы хотите в результате получить.  А то получается как то так: молоток рука шуруп череп Как можно сделать это же дрелью? PS Рисуется так Код: QPainter painter(this); Название: Re: Рисование по QWidget в Линукс Отправлено: s-s-n от Мая 21, 2014, 17:09 А вы опишите что вы хотите в результате получить.  Спасибо за внимание к моей проблеме. QWidget создается динамически. Далее передается указатель на него в функцию создания контекста устройства. Указатель на контекст устройства передается при создании-установке кисти, шрифта, пера и т.д. Приведенные Win-функции использовались в примере, там создавался свой класс. Есть нечто общее. Что надо брать в качестве контекста? Возможно ли рисовать вне виджета? Обязательна реализация своего класса или нет? Название: Re: Рисование по QWidget в Линукс Отправлено: Bepec от Мая 21, 2014, 18:42 1) Виджет рисует себя сам и только в ф-ции painEvent(QPaintEvent*); 2) Виджет может отрисовывать QPixmap/QImage, которые будут доступны публично. 3) Рисовать вне виджета нельзя. Если есть необходимость - используйте платформозависимые фунции. 4) Ваша проблема решается приблизительно так : Создаётся виджет, отрисовывающий публичный QPixmap. Далее получаем из него QPixmap и рисуем что угодно. После рисования просим виджет перерисовать самого себя. PS я бы на вашем месте пересмотрел архитектуру вашей программы. Как показывает практика 50% "возможностей рисования вне виджета" не нужны. Название: Re: Рисование по QWidget в Линукс Отправлено: s-s-n от Мая 21, 2014, 18:55 PS я бы на вашем месте пересмотрел архитектуру вашей программы. Как показывает практика 50% "возможностей рисования вне виджета" не нужны. Спасибо. Буду экспериментировать. Архитектура задана жестко, менять ее нельзя... |