Название: grabWidget() для моего виджета Отправлено: finka от Октябрь 24, 2007, 14:32 Есть класс Ellipse, наследуемый от QWidget, в его конструкторе я делаю прозрачным фон виджета:
Код: QPalette newPalette = palette(); Код: QPainter painter(this); И еще функция Код: setRect(QRect newRect) privatePen, privateRect - поля виджета, которые я задаю. Если privateRect имеет длину/ширину больше 50, то когда я делаю QPixmap::grabWidget(ellipse) (или grabWidget(ellipse, ellipse->rect())), то получившаяся картинка имеет размеры 50*50, изображает верхний левый квадрат виджета. Кроме того прозрачные "уголки" виджета в картинке, полученной из этой функции превращаются в какой-то полупрозрачный мусор. Помогите сделать правильную картинку, изображающую виджет таким, какой он есть, может я че-то неправильно делаю... Название: Re: grabWidget() для моего виджета Отправлено: Литий от Октябрь 24, 2007, 15:16 Можно использовать функцию grabWindow, она берет пиксели прямо с экрана, а не отрисовывает виджет в pixmap.
Название: Re: grabWidget() для моего виджета Отправлено: finka от Октябрь 24, 2007, 16:44 В таком случае потеряют прозрачность прозрачные части виджета.
Название: Re: grabWidget() для моего виджета Отправлено: Литий от Октябрь 24, 2007, 16:59 Можно посмотреть исходники grabWidget, но там используются какие-то приватные функции и флаги... А можно (раз это твой виджет) вынести код рисования в отдельную функцию:
Код: void paintTo( QPainter &p ) Как сделать в общем случае, непонятно... Название: Re: grabWidget() для моего виджета Отправлено: Dodge от Октябрь 25, 2007, 01:33 Вам необходимо брать картинку именно с канвы виджета?
Может стоит упростить и рисовать этот эллипс сразу в пиксмап? ;D Типа того: Код: QPixmap myimage; Название: Re: grabWidget() для моего виджета Отправлено: finka от Октябрь 25, 2007, 14:53 Если учесть, что у меня не только эллипс, но и еще много чего разного бывает, то упростить таким образом не получится.
Название: Re: grabWidget() для моего виджета Отправлено: Dodge от Октябрь 25, 2007, 17:56 Если учесть, что у меня не только эллипс, но и еще много чего разного бывает, то упростить таким образом не получится. Это почемуэто не получится?...Нада мыслить с размахом! Код: class MyWidget : public QWidget { При таком раскладе, получается оч универсальный виджет, рисуй его, куда хочешь. Если это необходимо, можно сделать еще кое что: Код: class MyWidget : public QWidget { Код: QPixmap image; Название: Re: grabWidget() для моего виджета Отправлено: finka от Октябрь 26, 2007, 15:49 А теперь представьте, что у меня есть ну допустим ellipseWidget, rectWidget, lineWidget, QPushButton, QLabel и тд, все они содержатся в списке QList <QWidget *>, и я в данный момент времени не знаю, кто там есть кто, и мне надо нарисовать изображение некоторого элемента оттуда. Грубо говоря, это лишь попытка сделать drag/drop с перетаскивающимся изображением виджета. Перебирать все типы в поисках нужного, чтобы именно к его функции обратиться, жутко неудобно.
Название: Re: grabWidget() для моего виджета Отправлено: Dodge от Октябрь 29, 2007, 14:17 А теперь представьте, что у меня есть ну допустим ellipseWidget, rectWidget, lineWidget, QPushButton, QLabel и тд, все они содержатся в списке QList <QWidget *>, и я в данный момент времени не знаю, кто там есть кто, и мне надо нарисовать изображение некоторого элемента оттуда. Грубо говоря, это лишь попытка сделать drag/drop с перетаскивающимся изображением виджета. Перебирать все типы в поисках нужного, чтобы именно к его функции обратиться, жутко неудобно. Хы.А как же наследование? 1. Создаем абстрактный базовый класс с этой функцией: Код: class MyBaseWidget : public QWidget { Код: class MyEllipseWidget : public MyBaseWidget { Код: QList<MyBaseWidget*> mywidgets; Еще вопросы? З.Ы. Если чтото не понятно, могу прислать рабочий пример. З.Ы.Ы. А вообще, технология драг энд дроп в куте реализованна немного по другому. Название: Re: grabWidget() для моего виджета Отправлено: finka от Октябрь 30, 2007, 13:18 Как я уже написала, наряду с моими виджетами планируется использовать qt-шные:
Цитировать ellipseWidget, rectWidget, lineWidget, QPushButton, QLabel и тд |