Название: Рисование по 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% "возможностей рисования вне виджета" не нужны. Спасибо.Буду экспериментировать. Архитектура задана жестко, менять ее нельзя... |